快排

前言

有空复习下简单常见的算法

正文

快排

快排的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快排需要取一个数为”基准”,一般取左边的第一个;然后第一遍结果是这个基准数的左边都比他小,右边都比他大;
快排设置两个变量i,j;i表示从左边开始记录数字的位置,j表示从右边开始记录数字的位置;还有一个基准为key;

例如:
6 1 2 7 9 3 4 5 10 8
取基准key=6;
i=0; j=9;(这个是递归结束条件是i=j)
从右边j=9开始取第一个比key小的数5与key值(6下面就省略了)交换为:
0 1 2 3 4 5 6 7 8 9 位置(下面省略)
5 1 2 7 9 3 4 6 10 8 同时i=0 ,j变成j=7;
从左边i=0开始取第一个比key大的数7与key值交换为:
5 1 2 6 9 3 4 7 10 8 同时i=3,j=7;
从右边j=7开始取第一个比key小的数4与key值交换为:
5 1 2 4 9 3 6 7 10 8 同时i=3,j=6;
从左边i=3开始取第一个比key大的数9与key值交换为:
5 1 2 4 6 3 9 7 10 8 同时i=4,j=6;
从右边j=6开始取第一个比key小的数3与key值交换为:
5 1 2 4 3 6 9 7 10 8 同时i=4,j=5;
从左边i=4开始取第一个比key大的数与key值交换为:
发现i=5=j;结束; 会发现key的左边都比他小,右边都比他大;然后再根据key划分成两部分再排序;

为了得到最终结果需要再次对key两边的数组分别排序,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。

-------------本文结束感谢您的阅读-------------