赞
踩
将多个有序表整合成一个有序表
思路:开始两个两个元素进行比较形成新的子表,然后含有两个元素的子表于另一个子表进行比较,形成四个元素的子表,以此类推,最终形成只有两个子表,再归并,形成有序序列。
#include <stdio.h> #include <stdlib.h> #define n 7 int *temp=(int*)malloc(n*sizeof(int)); void MergeSortEle(int Ele[],int low,int high); void Merge(int Ele[],int low,int mid,int high); int main () { int i; int date[]={49,38,65,97,76,13,27}; int len=sizeof(date)/sizeof(date[0]); MergeSortEle(date,0,len-1); for(i=0;i<len;i++) { // printf("%d\n",date[i]); } return 0; } void MergeSortEle(int Ele[],int low,int high) { int mid; if(low<high) { mid=(low+high)/2; MergeSortEle(Ele,low,mid); MergeSortEle(Ele,mid+1,high); Merge(Ele,low,mid,high); } } void Merge(int Ele[],int low,int mid,int high) { //存放在一个子数组中temp,进行中转 int k,m; for(k=low;k<=high;k++) { temp[k]=Ele[k]; printf("-%d",Ele[k]); } printf("\n"); //进行归并排序 int i,j,l; for(i=low,j=mid+1,l=i;i<=mid&&j<=high;l++) { if(temp[i]<=temp[j]) { Ele[l]=temp[i++]; }else { Ele[l]=temp[j++]; } } while(i<=mid)Ele[l++]=temp[i++]; while(j<=high)Ele[l++]=temp[j++]; for(m=0;m<=high;m++) { printf("$%d",Ele[m]); } printf("\n"); }
手动递归过程:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。