快速排序(qsort)
代码如下:
#include <stdio.h>
void Qsort(int *a, int low, int high)
{
if (low < high)
{
int first = low;
int last = high;
int key = a[first]; // 取第一个位置为枢轴位置
while (first < last)
{
while (first < last && key < a[last])
--last; // 从右往左:扫描到第一个小于key(枢轴)位置last
a[first] = a[last]; // 将右边第一个小于key的值,赋值给枢轴位置
while (first < last && a[first] < key)
++first; // 从左往右:扫描到第一个大于key(枢轴)位置first
a[last] = a[first]; // 将左边第一个大于key的值,赋值给枢轴位置
}
a[first] = key; // 中间值已到位(这时first==last)
Qsort(a, low, first - 1); // 递归左半部分
Qsort(a, first + 1, high); // 递归右半部分
}
}
int main()
{
int a[] = { 57, 68, 59, 52, 72, 28, 96, 33, 24 };
Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
printf("%d ", a[i]);
getchar();
return 0;
}