剑指offer 归并排序

来源:互联网 发布:双向视觉优化训练系统 编辑:程序博客网 时间:2024/04/28 01:19


#include <iostream>using namespace std;//src is seperatly sorted [start,flag] and [flag+1,end]//merge 2 parts into 1 sorted array resvoid Merge(int* src,int* res,int start,int end,int flag){int i=start,j=flag+1,k=i;while(i<=flag && j<=end){if(src[i]<src[j]) res[k++]=src[i++];else res[k++]=src[j++];}if(i<=flag){while(i<=flag) res[k++]=src[i++];}if(j<=end){while(j<=end) res[k++]=src[j++];}}//get [start,end] sortedvoid MergeSortCore(int* src,int* res,int len,int start,int end){if(start==end){res[start]=src[start];return;}int tmpres[len];int flag=(start+end)/2;//get [start,flag] sortedMergeSortCore(src,tmpres,len,start,flag);//get [flag+1,end] sortedMergeSortCore(src,tmpres,len,flag+1,end);//merge 2 parts, to get [start,end] sortedMerge(tmpres,res,start,end,flag);}void MergeSort(int* src,int* res,int len){if(!src||!res||len<=0) return;MergeSortCore(src,res,len,0,len-1);}int main(){int src[]={3,4,6,5,1,2};int len=sizeof(src)/sizeof(*src);int res[len];MergeSort(src,res,len);for(int i=0;i<len;++i){cout<<res[i]<<' ';}}


0 0
原创粉丝点击