#include <iostream>
using namespace std;
void Qsort(int a[]);
void sort(int a[], int low, int high);
int parttition(int a[], int low, int high);
void swap(int a[], int i, int j);
void Qsort(int a[])
{
sort(a, 0, 9); //
}
void sort(int a[], int low, int high)
{
if (high <= low) return; // 4 lines
int j = parttition(a, low, high); // 切分
sort(a, low, j - 1); // 将左半部分a[low ... j-1]排序
sort(a, j + 1, high); // 将右半部份a[j+1 ... high]排序
}
int parttition(int a[], int low, int high)
{
int v = a[low]; // 切分元素
int i = low; // 左扫描指针
int j = high + 1; // 右扫描指针
while (true)
{
while (a[++i] < v)
if (i == high)
break;
while (a[--j] > v)
if (j == low)
break;
if (i >= j)
break;
swap(a, i, j);
}
swap(a, low, j); // 将v = a[j] 放入正确的位置
return j; // a[low ... j-1] ≤ a[j] ≤ a[j+1 ... high]达成
}
void swap(int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
int main()
{
int a[10] = { 1, 3, 2, 4, 8, 0, 5, 6, 7, 9 };
Qsort(a);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布