快速排序相对较简单,但是把代码写好也很考察一个人的基本功。
#include <iostream>
using namespace std;
int partition(int* data, int length, int start, int end){
if (data == NULL || length <= 0 || start < 0 || end >= length){
throw new exception("Wrong data!");
}
int pos = start + (end - start) / 2;
swap(data[pos], data[end]);
int small = start - 1;
for (pos = start; pos < end; ++pos){
if (data[pos] < data[end]){
++small;
if (small != pos){
swap(data[small], data[pos]);
}
}
}
++small;
swap(data[small], data[end]);
return small;
}
void QuickSort(int* data, int length, int start, int end){
if (start == end){
return;
}
int split = partition(data, length, start, end);
if (split > start + 1){
QuickSort(data, length, start, split - 1);
}
if (split < end - 1){
QuickSort(data, length, split + 1, end);
}
}
void main(int argc, char* argv[])
{
int arr[] {5, 1, 8, 2, 6, 4, 9, 5};
QuickSort(arr, 8, 0, 7);
for (int i = 0; i < 8; ++i){
cout << arr[i] << ",";
}
system("pause");
}