快速排序QuickSort

来源:互联网 发布:淘宝 500手机 编辑:程序博客网 时间:2024/06/08 18:58

快速排序是一种分治算法,即通过递归,不断减少每一次要处理的数组元素,并找到分界元素的位置,具体地:

1)给定一个大小为n的数组A[n];

2)以数组中第一个元素,即A[0]=x作为第一次分界值,将A[n]中剩余的其它元素,按照“比x小或者相等的元素放在x的左边,比x大的元素放在x右边”的规则,重新排列数组,假设为B[n],并返回一个数值q,表示x在重新排列后数组的位置;具体的,可以使用使用Partition函数实现,传入数组A及其首尾位置l和r作为参数,返回q;

3)得到位置q后,即可以将新的数组B[n]分成两部分,一部分是从B[0]到B[q-1]的数组B1,另一部分是从B[q+1]到B[n-1]的数组B2;分别对B1和B2重复进行上述操作,递归直到数组的元素不能再分为止;

这里只是大概讲一下快排的思想,没有涉及过多的实现,主要想说明为什么通过这样的递归操作,最后能实现数组的排序:我们发现,每一个求新数组的首位元素的正确位置q之后,我们会把首元素x和位置q上的元素对调,即把x放到了最终结果的相应位置上去了,其它元素的位置没有确定,但被正确地分开在了大于x和小于等于x的两边。所以子数组是不包括位置q的(从q-1和q+1可以看出);每一次对子数组进行划分的时候,都会把子数组的首元素放在最终结果的相应位置上去;最后剩下一个元素的时候,该位置自然也就是最终结果的位置了。

0 0
原创粉丝点击