快速排序算法原理与实现

2020-06-12 教育 109阅读

基本原理

从序列中任选一个数作为“基准”;所有小于“基准”的数,都挪到“基准”的左边;所有大于等于“基准”的数,都挪到“基准”的右边。

在这次移动结束之后,该“基准”就处于两个序列的中间位置,不再参与后续的排序;针对“基准”左边和右边的两个子序列,不断重复上述步骤,直到所有子序列只剩下一个数为止。

1、选择“基准”,并将其从原始数组分离

先获取基准的索引值,再使用splice数组方法取出基准值。

Tips:该实例中, 基准的索引值 = parseInt(序列长度 / 2)。

Tips:splice方法会改变原始数组。例如,arr = [1, 2, 3]; 基准索引值为1,基准值为2,原始数组变为arr = [1, 3]。

2、遍历序列,拆分序列

与“基准”比较大小,并拆分为两个子序列,小于“基准”的数存储于leftArr数组当中,大于等于“基准”的数存储于rightArr数组当中。

Tips:当然,也可以将 小于等于“基准”的数存于leftArr,大于“基准”的数存于rightArr。

由于要遍历序列,将每一个数与“基准”进行大小比较,所以,需要借助for语句来实现

3、递归调用,遍历子序列并组合子序列的结果

定义一个函数,形参用于接收数组

function quickSort(arr) { };

实现递归调用遍历子序列,用concat数组方法组合子序列的结果。

4、判断子序列的长度

递归调用的过程中,子序列的长度等于1时,则停止递归调用,返回当前数组。

扩展资料

一趟快速排序的算法是:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。

参考资料:百度百科 快速排序法

声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com