归并排序


#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct RcdType { ElemType key; }RcdType; void Merge (RcdType SR[],int low,int mid,int high) { int i,j,k; RcdType* TR; if( !(TR=(RcdType*)malloc(sizeof(RcdType)*(high-low+1)))) exit(0); for(j=mid+1,i=low,k=0; i<=mid&&j<=high; k++) { if(SR[i].key<=SR[j].key) TR[k]=SR[i++]; else TR[k]=SR[j++]; } while(i<=mid) { TR[k++]=SR[i++]; } while(j<=high) { TR[k++]=SR[j++]; } for(i=low;i<=high;i++) { SR[i].key=TR[i-low].key; } } void MSort(RcdType SR[],int low,int high) { int mid; if(low!=high) { mid=(low+high)/2; MSort(SR,low,mid); MSort(SR,mid+1,high); Merge(SR,low,mid,high); } } void MergeSort(RcdType SR[],int low,int high) { int i; MSort(SR,low,high); for(i=low;i<=high;i++) { printf("%d,",SR[i].key); } } int main() { RcdType sr[]={{0},{3},{5},{7},{4},{6},{8},{12}, {15},{54},{12},{65},{32},{15},{15},{78},{154}, {3544},{32112},{321},{155},{321}}; MergeSort(sr,0,21); return 0; }   
原文地址:https://www.cnblogs.com/GW17195/p/5538320.html