快速排序算法原理及Java代码实现

1 基本思想

1.1 意义

快速排序是冒泡排序的改进版,也是最好的一种内排序,还涉及到分治和递归

1.2 简单解释

冒泡排序中记录的比较和交换是在相邻的单元中进行,每次交换只能上移或下移一个单元,因而总的比较和移动次数较多

1.3 基本思想

①先从数列中取出一个数作为基准数(简单起见可以取第一个数)
②分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边(分区)
③再对左右区间重复第一步、第二步,直到各个区间只有一个数(递归

1.4 图示

第一趟排序
初始状态:10个数

0 1 2 3 4 5 6 7 8 9
72 6 57 88 60 42 83 73 48 85

指定起始坐标i=0,结束坐标j=9;假设第一个数72为基准数,将72挖出来,空出位置

0 1 2 3 4 5 6 7 8 9
6 57 88 60 42 83 73 48 85 72
i=0 j=9 x

从右向左移动j,找到第一个小于72的值48(j=8)

0 1 2 3 4 5 6 7 8 9
6 57 88 60 42 83 73 48 85 72
i=0 j=8 x

将48加入到i=0的()位置,i++变为1,j=8处变为“

0 1 2 3 4 5 6 7 8 9
48 6 57 88 60 42 83 73 85 72
i=1 j=8 x

从左向右移动i,找到第一个大于等于72的值88(i=3)

0 1 2 3 4 5 6 7 8 9
48 6 57 88 60 42 83 73 85 72
i=3 j=8 x

将88加入到j=8的()位置,j–变为7,i=3处变为“

0 1 2 3 4 5 6 7 8 9
48 6 57 60 42 83 73 88 85 72
i=3 j=7 x

从右向左移动j,找到第一个小于72的值42(j=5)

0 1 2 3 4 5 6 7 8 9
48 6 57 60 42 83 73 88 85 72
i=3 j=5 x

将42加入到i=3的()位置,i++变为4,j=5处变为“

0 1 2 3 4 5 6 7 8 9
48 6 57 42 60 83 73 88 85 72
i=4 j=5 x

从左向右移动i,寻找第一个大于等于72的值,找到坑(此时i=j)也没有找到,循环结束。
此时说明变量i左边的数字全部小于72,右边的数字全部大于72

0 1 2 3 4 5 6 7 8 9
48 6 57 42 60 83 73 88 85 72
i=j=5 x

将基准值72填入i=j的坑内,第一趟排序结束

0 1 2 3 4 5 6 7 8 9
48 6 57 42 60 72 83 73 88 85
i=j=5

对前后两个分区继续重复刚才的步骤(递归),完成整个数列的排序

0 1 2 3 4 5 6 7 8 9
6 42 48 57 60 72 73 83 85 88

2 Java代码实现快速排序

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44960771/article/details/89505541
今日推荐