归并排序(C语言版)

来源:互联网 发布:有思想的网络频道 编辑:程序博客网 时间:2024/05/21 09:00
归并排序的思想:将无序序列切割为若干个有序序列然后排序;#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;}