快速排序 代码语言:c
快速排序
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
给定一个数列,用快速排序算法把它排成升序。
输入:
第一行是一个整数n,表示要排序的数的个数;下面一行是用空格隔开的n个整数。
输出:
输出排序后的数列,每个数字占一行。
输入样例:
5
3 2 1 4 5
输出样例:
1
2
3
4
5
代码:
#include<stdio.h>
#include<stdlib.h>
int *a;
int Partition(int low,int high)
{
int temp;
int pivotkey=a[low];
while(low<high)
{
while(low<high&&a[high]>=pivotkey)
{
--high;
}
temp=a[low];
a[low]=a[high];
a[high]=temp;
while(low<high&&a[low]<=pivotkey)
{ low++; }
temp=a[low];
a[low]=a[high];
a[high]=temp;
}
return low;
}
void QSort(int low,int high)
{
int pivotloc;
if (low < high)
{ pivotloc = Partition(low, high); // 将L.r[low..high]一分为二
QSort(low, pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置
QSort(pivotloc+1, high); // 对高子表递归排序
}
}
int main()
{ int n,i;
scanf("%d",&n);
a=(int *)malloc((n+1)*sizeof(int));
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
QSort(1,n);
for(i=1;i<=n;i++)
{
printf("%d\n",a[i]);
}
return 0;
}

浙公网安备 33010602011771号