归并

来源:互联网 发布:淘宝申请浦发信用卡 编辑:程序博客网 时间:2024/04/27 14:54
#include "stdio.h"#include<malloc.h>//归并排序;把src数组分成两部分有序的,然后合并。void merg(int src[],int start,int mid,int end,int temp[]){int i=start,m=mid;int j=mid+1,e=end;int k=0;while(i<=mid&&j<=e){if(src[i]<=src[j]){temp[k++]=src[i++];}else{temp[k++]=src[j++];}}while(i<=m){temp[k++]=src[i++];}while(j<=e){temp[k++]=src[j++];}for (i = 0; i < k; i++)  //最终src就是排列后的,        src[start + i] = temp[i]; }void mergesort(int a[], int first, int last, int temp[])  {  int mid ;    if (first <last)      {          mid= (first + last) / 2;          mergesort(a, first, mid, temp);    //左边有序           mergesort(a, mid + 1, last, temp); //右边有序           merg(a, first, mid, last, temp); //再将二个有序数列合并       }  } int MergeSort(int a[], int n)  {      int *p = (int*)malloc(n*sizeof(int));      if (p == NULL)          return -1;      mergesort(a, 0, n - 1, p);      free(p);      return 0;  }  void main(){    unsigned int sort[]={5099999,19992,9990,32,20,2999990,80,900991,20};//0-6;7-13   unsigned int dest[9]={0};   int a;      MergeSort(sort,9);    for(a=0;a<9;a++)    {    printf("dest[%d]=%d\n",a,sort[a]);    }    }
dest[0]=20dest[1]=20dest[2]=32dest[3]=80dest[4]=9990dest[5]=19992dest[6]=900991dest[7]=2999990dest[8]=5099999             Press any key to continue



0 0
原创粉丝点击