#include<stdio.h>
typedef int elemtype;
void Part(elemtype r[], int low, int high, int *pivotloc);
void QuickSort(elemtype r[], int low, int high);
int main()
  {
int i, m;
elemtype r[1000];
while (1)
 {
scanf("%d", &m);
for (i = 0; i < m; i++)
 {
scanf("%d", &r[i]);
}
QuickSort(r, 0, m - 1);
printf("\n排序结果-------------------------\n");
for (i = 0; i < m; i++)
 {
printf("%d ", r[i]);
}
}
system("pause");
return 0;
}
void Part(elemtype r[], int low, int high, int *pivotloc)
  {
int j, l = low, h = high;
elemtype pivotkey = r[low];//确定比较基数
while (high != low)
 {
while (low < high && pivotkey <= r[high])//查找r[low]右边小于pivotkey的元素r[high]
 {
high--;
}
if (low < high)
 {
r[low] = r[high];
low++;
}
while (low < high && r[low] <= pivotkey)//查找r[high]左边大于pivotkey的元素r[low]
 {
low++;
}
if (low < high)
 {
r[high] = r[low];
high--;
}
}
r[high] = pivotkey;//将比较基数pivotkey赋给分界点
*pivotloc = high;//标记分界点
for (j = l; j <= h; j++)
 {
if (j == low)
 {
printf("<%d> ", r[j]);//打印分界点的值; r[l]到r[low-1]的所有元素都小于分界点, r[low+1]到r[h]得所有元素都大于分界点
}
else
 {
printf("%d ", r[j]);
}
}
printf("\n");
}
void QuickSort(elemtype r[], int low, int high)
  {
int i, j;
if (low < high)
 {
Part(r, low, high, &i);
//因为Part函数,使r[low]到r[i-1]的所有元素都小于r[i], r[i+1]到r[high]得所有元素都大于r[i],所以不需要在将r[i]参与排序
QuickSort(r, low, i - 1);
QuickSort(r, i + 1, high);
}
}
 /**//*
10
9 11 4 5 21 17 15 13 11 4
*/
|