对于快速排序网上有各种教程,这里记录一下自己的理解。
快速排序运用了分治的思想,我觉得和归并有一点类似,都可将问题划分为更细的小问题求解。
这里记录一下c++的递归实现
//这里为了调用方便开出来一个调用接口
void myQSort(int *arr, int len) {
QSort(arr, 0, len - 1);
}
//满足条件则递归交换
void QSort(int *arr, int lef, int rig) {
if (lef < rig) {
int i = QSort_main(arr, lef, rig);
//根据主体返回的节点分为两部分递归处理
QSort(arr, lef, i - 1);
QSort(arr, i + 1, rig);
}
}
//函数主体
int QSort_main(int *arr, int lef, int rig) {
//记录开始点为基点
int sp = arr[lef];
while (lef < rig) {
//右指针左移寻找比基点小的
while (lef < rig&&arr[rig] >= sp) rig--;
if (lef < rig) arr[lef] = arr[rig];
//左指针右移寻找比基点大的
while (lef < rig&&arr[rig] < sp) lef++;
if (lef < rig) arr[rig] = arr[lef];
}
//最后两指针相遇时填坑基点
arr[lef] = sp;
return lef;
}