/**************************************
--修改日期: 2009.5.29
--修改人: 吴强
--修改原因: 从前写的代码不够规范
--输入要求: 无
***************************************/
#include
#define N 20
main()
{
int s[N]={20, 4, 3, 1, 5, 6, 34, 23, 12, 43,
53, 42, 23, 14, 25, 26, 15, 11, 21, 11 };
int i;
void QuickSort(int *s, int low, int high);
int Partition(int *s, int i, int j);
QuickSort(s, 0, N-1);
for (i=0; i< N; i++)
{
printf("%d,",s[i]);
}
}
/*快速排序,low,high为指向头尾的下标*/
void QuickSort(int s[], int low, int high)
{
int pivotpos;
if (low< high)
{
/*用递归做完刮分*/
pivotpos=Partition(s, low, high);
QuickSort(s, low, pivotpos-1);
QuickSort(s, pivotpos+1, high);
}
}
/*做刮分,返回值所放位置下标*/
int Partition(int s[], int i, int j)
{
/*以第一个值为基准(P)*/
int p=s[i];
/*如果i=j时候退出,表示已经找到基准该放的位置*/
while(i< j)
{
while(i< j && s[j]>p) /*从后面起找出不比基准大的值的下标*/
{
j--;
}
if (i< j)
{
s[i++]=s[j]; /*把小的值换到基准前面*/
}
while(i< j && s[i]< p) /*接着前面找出不比基准小的值的下标*/
{
i++;
}
if (i< j)
{
s[j--]=s[i]; /*把其放到基准后面*/
}
}
s[i]=p;
return i;
}