#include<iostream>#include<ctime>#include<cstdlib>#include<cstdio>#define N 50typedefstruct{int data[1024];int length;} IntList;usingnamespace std;voidmerge(IntList *l,int l1,int r1,int l2,int r2){int i = l1, j = l2;
IntList tmp;
tmp.length =0;while(i <= r1 && j <= r2){if(l->data[i]<= l->data[j]){
tmp.data[tmp.length++]= l->data[i++];}else{
tmp.data[tmp.length++]= l->data[j++];}}while(i <= r1){
tmp.data[tmp.length++]= l->data[i++];}while(j <= r1){
tmp.data[tmp.length++]= l->data[j++];}for(int i =0; i < tmp.length;++i){
l->data[l1 + i]= tmp.data[i];}}voidmergeSort(IntList *l,int left,int right){if(left < right){int mid =(left + right)/2;mergeSort(l, left, mid);mergeSort(l, mid +1, right);merge(l, left, mid, mid +1, right);}}intmain(){
IntList l;
l.length =0;srand((unsignedint)time(NULL));for(int i =0; i < N;++i){
l.data[l.length++]=rand()%100;}printf("排序前:\n");for(int i =0; i < l.length;++i){printf("%d ", l.data[i]);}printf("\n==================================================\n");mergeSort(&l,0, l.length -1);printf("排序后:\n");for(int i =0; i < l.length;++i){printf("%d ", l.data[i]);}return0;}
H:\CPP_pro\pro01\a.exe
排序前:26876176773138470982659774722594592892998992632587313176555186536478338736453319359256464994961==================================================
排序后:23399131718192526262628313235363846474749495355565859596161646565707373767777838487929294989899
Process finished with exit code 0