#include<stdio.h>
#define N 20
void qusort(int a[], int start, int end);
int main(void)
{
int i;
int a[N];
int n;
printf("Please input the nuimber of figures:\n");
scanf("%d",&n);
for (i = 1; i <= n; i++)//注意i是从1开始的,第1个位置要用来存放监视哨,也可以采用临时变量存放监视哨
{
scanf("%d",&a[i]);
}
qusort(a,1,n);//传递数组的一个元素和最后一个元素的下标
for (i = 1; i <= n; i++)
{
printf("%d\t",a[i]);
}
getchar();
getchar();
return 0;
}
void qusort(int a[], int start, int end)//函数定义为start和end
{
int i, j;//临时变量用来存放start和end的值
i = start;
j = end;
a[0] = a[start];//将第一元素的值赋给a[0]做监视哨
while (i < j)//如果i和j相等的话,则数组已经被分成两半了
{
while (i < j && a[0] < a[j])//从后向前判读是否比监视哨值大
{
j--;//比监视哨大的话,j--
}
if (i < j)//只要i比j小
{
a[i] = a[j];//交换
i++;//i向后移
}
while (i < j && a[i] <= a[0])//从前向后判断i是否比监视哨小
{
i++;
}
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = a[0];//当i和j相等时,将a[0]插入
if (start < i)//当start比i小时,要继续递归下去,目的是要i回到start,则说明数组前段已排好
{
qusort(a, start, j - 1);//注意参数的传递,start不变,j-1
}
if (i < end)//当i比end小时,要继续递归下去,目的是要i回到end,则说明数组后段已排好
{
qusort(a, j + 1, end);
}
}
快速排序代码详解
最新推荐文章于 2022-05-19 17:49:42 发布