思想
快速排序基于分治的思想,从当前待排序列中选取一个基准,也称为枢轴(通常取序列的第一个元素),将该基准元素放入其最终位置后,将序列一分为二,使得该基准以前的所有元素构成的子序列均小于等于基准元素,基准以后的所有元素构成的子序列均大于等于基准元素,这个过程称为一次划分。
然后对划分所得的两个子序列再进行如上操作,直到每一个子序列内只剩下一个元素或者为空时停止。
#include <iostream>
using namespace std;
const int LENGTH = 10;
int Partiton(int a[], int low, int high) { //划分
int temp = a[low];
while (low < high) {
while (low < high && a[high] >= temp) high--;
a[low] = a[high];
while (low < high && a[low] <= temp) low++;
a[high] = a[low];
}
a[low] = temp;
return low;
}
void QuickSort(int a[], int low, int high) { //排序
if (low < high) {
int pivot = Partiton(a, low, high);
QuickSort(a, low, pivot - 1);
QuickSort(a, pivot + 1, high);
}
}
int main() {
int a[LENGTH] = {2, 5, 1, 1, 10, 6, 2, 4, 3, 5};
cout << "初始序列:";
for (int i = 0; i < LENGTH; ++i) {
cout << a[i] << " ";
}
cout << endl;
cout << "排序之后:";
QuickSort(a, 0, LENGTH - 1);
for (int i = 0; i < LENGTH; ++i) {
cout << a[i] << " ";
}
return 0;
}