快速排序
@Language:C++
#include<iostream>
#include<cstdio>
using namespace std;
//挖坑法
int partition(int a[], int start, int end){//划分数组
int povit = a[start];//以第一个数为基准
//因为保存了第一个数,所以数组里第一个数的位置可以当作坑给其他数占用
while(start < end){
while(start < end && a[end]>=povit) end--;
/*start < end 避免某次start>end时也交换了次序
a[end]>=povit这里必须加等于号,
否则有两个相等的数会陷入死循环
*/
a[start] = a[end];
while(start < end && a[start]<=povit) start++;//和上面同理
a[end] = a[start];
}
a[start] = povit;
return start;
}
void quickSort(int a[], int start, int end){
if(start<0|| a == NULL || start >= end)//边界条件
return;
int index = partition(a, start, end);
quickSort(a, 0, index-1);
quickSort(a, index+1, end);
}
int main() {
int a[12]= {4,9,6,4,89,21,87,63};
quickSort(a, 0, 7);
for(int i = 0; i < 7; i++){
printf("%d,",a[i]);
}
return 0;
}
快排的思想适用于求第k小的数或双指针,本质上还是分治思想