快速排序采用分治递归法,将问题分解为一个个小的问题,再递归求之。
大致思想为:
首先对于一个区间L,R,找到一个元素p,将所有大于p的元素全部移动到p的右边,所有小于p的元素全部移动到p的左边,这样就大致将顺序整理了一下,然后对于p左边的区间L1,R1,递归上述方法,右区间同理。
#include <cstdio>
using namespace std;
void QuickSort(int *arrs, int l, int r){
if(l >= r)
return;
int L = l, R = r;
int key = arrs[l];
while(l < r){
while(l < r && key < arrs[r]){
r--;
}
arrs[l] = arrs[r];
while(l < r && key > arrs[l]){
l++;
}
arrs[r] = arrs[l];
}
arrs[l] = key;
QuickSort(arrs, L, l - 1);
QuickSort(arrs, l + 1, R);
}
int main()
{
int arrs[] = {9, 8, 2, 1, 0, 6, 3};
int len = sizeof(arrs) / sizeof(int);
QuickSort(arrs, 0, len-1);
for(int i = 0; i < len; i++)
printf("%d ", arrs[i]);
printf("\n");
return 0;
}