快速排序的主要思想是partition思想,其大致内容如下:
1.随机选择基准值,一般是第一个数;
2.利用头尾指针,头指针负责找第一个比基准值大的数,尾指针负责找第一个比基准值小的数,交换两个指针的内容;
3.将基准值放到其应该属于的位置;
4.递归地进行以基准值分成的左右部分;
c++代码
//快速排序
void quick_sort(int arr[], int start, int end) {
if (start < end) {
//partition过程
//基准值
int key = arr[start];
//前后扫描用的指针
int left = start;
int right = end;
while (left < right) {
//right从右向左负责找第一个比基准值小的值
while (left<right && arr[right] >= key) {
--right;
}
if (left < right)
arr[left++] = arr[right];
//left从左向右负责找第一个比基准值大的值
while (left < right && arr[left] < key) {
++left;
}
if (left < right)
arr[right--] = arr[left];
}
//left>=right时
//把基准值放到正确的位置;
arr[left] = key;
//将基准值左右两部分递归
quick_sort(arr, start, left - 1);
quick_sort(arr, left + 1, end);
}
}
注意:每一次partition过程只是将小于基准值的放到基准值左边,大于基准值的放到右边。在一次partition完成后,实际上,基准值左侧的值并不是有序的,右侧也同样不是有序的。因此才需要递归,将剩下的无序部分变为有序。
来源:CSDN
作者:Roi_
链接:https://blog.csdn.net/Lu_www/article/details/103749274