问题描述
给定一个数列,用归并排序算法把它排成升序
输入格式
第一行是一个整数n(n不大于10000),表示要排序的数的个数;
下面一行是用空格隔开的n个整数。
输出格式
输出排序后的数列,每个数字占一行。
样例输入
5
3 2 1 4 5
样例输出
1
2
3
4
5
思路:
写出快排的核心代码,以中间值为关键字,两层循环嵌套,从左到右找大值,从右到左找小值,找到后二者直接交换,不断循环
具体代码:
# include <stdio.h>
# define N 1000
//快排的核心代码
void quick_sort( int *a, int n)
{
int i, j, p, tmp;
if (n < 2) return;//长度小于2就不用排序
p = a[n / 2]; //
for ( i = 0, j = n -1;; i++, j--) {
while (a[i] < p)
i++;
while (p < a[j])
j--;
if ( i >= j)
break;
tmp = a[i]; a[i] = a[j]; a[j] = tmp;
}
quick_sort( a, i);
quick_sort( a + i, n - i);
}
int main()
{
int a,b[N],i;
printf("输入数据个数\n");
scanf("%d",&a);
printf("输入具体数据\n");
for(i=0;i<a;i++)
{
scanf("%d",&b[i]);
}
printf("排序结果为:\n");
quick_sort(b,a);
for (i = 0; i < a; i++)
printf("%d ", b[i]);
return 0;
}