归并排序的思想:将无序序列切割为若干个有序序列然后排序;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void merge(int *a, int left, int right, int mid){
int b[10000];
int i, j, k;
for(i=left, j=mid+1, k=0; i<=mid&&j<=right; k++){
if(a[i]<a[j]) b[k]=a[i++];
else b[k]=a[j++];
}
while(i<=mid){
b[k++]=a[i++];
}
while(j<=right){
b[k++]=a[j++];
}
memcpy(a+left, b, k*sizeof(int));
return;
}
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 a[1000];
int main(){
int n;
while(scanf("%d", &n), n){
int i;
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
merge_sort(a, 0, n-1);
for(i=0; i<n; i++)
printf("%d%c", a[i], i==n-1?'\n':' ');
}
return 0;
}
归并排序(C语言版)
最新推荐文章于 2024-07-26 15:53:29 发布