快速排序:
通过一趟排序,将要排序的数据分2个部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法
对这两部分数据分别进行快速排序,整个排序过程可以用递归,以达到整个数据变成有序序列。
快排(选定一个中值为基准)的实现:
对序列进行处理的操作思想:选定一个中轴值pivot,将序列切分称为两个子序列
具体的实现方式:
1、定义两个指针l、r,其中,l的初值为left,r的初值为right ;
2、 确定此次划分的中轴值pivot = (left +right)/2 ;
3 、若l < r的时候进行while循环,来进行对序列的按值划分:
(1)对l指针,从左向右遍历,直至遇到一个数,使arr[l]<pivot不成立;
(2)对r指针,从右向左遍历,直至遇到一个数,使arr[r]<pivot不成立;
此时,如果l < r,就交换l、r对应的元素的值;否则,退出循环。
注:如果在某一次交换l、r对应的元素值之后,若发现arr[l] == pivot,应该将r指针向前移动一位;同理,如果在某一次交换l、r对应的元素值之后,发现arr[r] == pivot,也就是进行交换之前arr[l] == pivot,应该将l指针向后移动一位;
对序列的处理完成后,就可以开始进入递归模块。
但是,进行递归操作时,要注意,使向左递归 和 向右递归到的时候,他们的递归边界不能重合(因为可能容易发生栈溢出)