通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。
#include <iostream>
using namespace std;
void quickSort(int* data, int low, int high) {
if(low >= high)
return;
int i=low;
int j=high+1;
int key = data[low];
while (true) {
while (data[++i] < key)
if(i==high)
break;
while (data[--j] > key)
if(j==low)
break;
if(i>=j)
break;
// swap i, j
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
// swap low, key_index=j
int tmp = data[low];
data[low] = data[j];
data[j] = tmp;
quickSort(data, low, j-1);
quickSort(data, j+1, high);
}
int main() {
int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
int size = sizeof(a) / sizeof(a[0]);
quickSort(a, 0, size-1);
for(int i = 0; i < size; i++)
cout << a[i] << "\t";
return 0;
}