排序之快速排序

时间:2022-01-13 04:27:27

快速排序是对冒泡排序的一种改进。

简而言之,就是选第一个数为标杆,将数组的数分为两部分。然后对该数据两边的数据进行递归上述操作。直到不能细分为止。

举例:

将下面一系列数,按递增顺序排列。

0 1 2 3 4
13 15 17 12 14

i=0 j=4  k=13

i是下标初始值,j是下标最大值,k是i=0下标的值,我们取之为初始值。

 

第一轮:

  第一次:

  我们从右往左取,j值递减,直到找到一个比k值小的数,然后将两个值的位置互换,并将j值更新为当前k值所在位置的下标。

0 1 2 3 4
12 15 17 13 14

  此时 i=0,j=3,k=13

 

  第二次:我们从左到右,i值递增,直到找到一个比k值大的数,然后将两个值的位置互换,并将i值更新为k值当前所在位置的下标。

 

0 1 2 3 4
12 13 17 15 14

  此时i=1,j=3,k=13

 

  第三次:重复第一次操作,发现没有数据可以互换,此时i,j,k三值不变。

 

  第四次:重复第二次操作,发现也没有数据可以互换,此时i,j,k三值不变。

此时情况  i和j值并不相等,但是第一轮已经结束了,(如果i值和j值相等说明,该轮已经结束)。

  

第二轮:则是对k值两边的数进行再次快速排序。以此类推,不可再分为止。

  k值左边的由于只有一个数,不可再排序。所以,不进行快速排序了。

  我们现在对k值右边的数组进行排序。

0 1 2
17 15 14

 

  i=0;j=2;k=17

  参照第一轮第一次操作进行结果如下:

  

0 1 2
14 15 17

  i=0;j=2;k=17

  第二次操作参照第一轮第二次操作:

    i=0;j=2;k=17

  第二轮操作结束,开始对17左边的两个数进行排序;

 

第三轮:

0 1
14 15

  第一次:i=0;j=1;k=14,依旧参考第一轮第一次操作,i,j,k三值均不变。

 排序结束

  Java代码参考链接:https://blog.csdn.net/jianyuerensheng/article/details/51258374