归并排序

来源:互联网 发布:窥孔优化 编辑:程序博客网 时间:2024/06/13 01:44
#include "stdio.h"int b[100];void merge(int a[], int left, int mid, int right){    int l = left;    int m = mid+1;    int k = 0;    while(l<=mid && m<=right)  //如果左半区间或右半区间结束,则跳出循环    {        if(a[l] <= a[m])   //如果左半区间元素较小            b[k++] = a[l++];        else          //如果右半区间元素较小            b[k++] = a[m++];    }    while(l<=mid)  //如果左半区间元素剩余        b[k++] = a[l++];    while(m<=right)  //如果有半区间元素剩余        b[k++] = a[m++];    int i;    for(i=0; i<(right-left+1); i++)  //将结果复制回数组a[]        a[left+i] = b[i];}void mergeSort(int a[], int left, int right){    if(left<right) //至少有两个元素    {        int mid = (left + right)/2; //取中点        mergeSort(a, left, mid);     //对左半区间进行排序        mergeSort(a, mid+1, right);  //对右半区间进行排序        merge(a, left, mid, right);   //将结果进行合并    }}int main(){    int a[100];    int len;    printf("输入元素个数:");    scanf("%d", &len);    printf("输入元素:");    int i;    for(i=0; i<len; i++)        scanf("%d", &a[i]);    mergeSort(a, 0, len-1);    for(i=0; i<len; i++)        printf("%d ", a[i]);    printf("\n");    return 0;}
0 0
原创粉丝点击