快速排序思想:以第一个元素(t=a[0])为基准,也就是为参照物,用两个指针low和high进行遍历,把比t小的放左边,比t大的放右边,然后递归排序。
#include<iostream>
using namespace std;
//按照从小到大排序
void qsort(int a[], int left, int right) {
if (left > right) { //递归出口
return;
}
int t = a[left]; //以第一个元素t为基准
int low = left;
int high = right;
while (low < high) {
//找到一个比t小的数
while (a[high] >= t && low < high) {
high--;
}
//找到一个比t大的数
while (a[low] <= t && low < high) {
low++;
}
//交换这两个数的位置
if (low < high) {
swap(a[low], a[high]);
}
}
//交换a[low]和基准数,以Low为分界线,左边小于a[low],右边大于a[low]
swap(a[left], a[low]);
//递归排序以low为分界线的左半部分
qsort(a, left, low - 1);
//归排序以low为分界线的右半部分
qsort(a, low + 1, right);
}
int main() {
int a[5] = { 2,3,1,5,4 };
qsort(a, 0, 4);
for (int i = 0; i < 5; ++i) {
cout << a[i] << " ";
}
return 0;
}