归并排序(C)
【习题描述】
【题目描述】
采用归并排序算法,并利用递归函数完成n个数字(n<100)的从小到大排序
【输入描述】
输入包括两行,第一行1个数字n,表示要排序的数字的个数,第二行有连续n个待排序数字
【输出描述】
输出只有一行,有n个排序后的数字,每个数字之间用一个空格间隔
【输入样例】
8
4 5 7 8 1 2 3 6
【输出样例】
1 2 3 4 5 6 7 8
#include
void merge(int a[],int left,int right,int mid) {
int s[100];
int i = left, j = mid + 1;
int sor = left;
while (i <= mid && j <= right) {
if (a[i] < a[j]) {
s[sor++] = a[i++];
}
else {
s[sor++] = a[j++];
}
}
while (i <= mid) s[sor++] = a[i++];
while (j <= right) s[sor++] = a[j++];
sor = left;
while (sor <= right) {
a[sor] = s[sor];
sor++;
}
}
void merge_sort(int a[],int left,int right){
if(left<right){
int mid = (left + right) / 2;
merge_sort(a,left, mid);
merge_sort(a, mid + 1, right);
merge(a, left, right, mid);
}
}
int main()
{
int n;
int i;
scanf("%d",&n);
int a[n];
for (i=0;i<n;i++) {
scanf("%d",&a[i]);
}
merge_sort(a, 0, n-1);
for(i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}