二路归并排序

来源:互联网 发布:java多级菜单 编辑:程序博客网 时间:2024/05/22 04:14

递归版本(也是最方便的版本咯)

#include<iostream>#include<cstdio>const int max=1000;void merge(int *rui,int L1start,int L1end,int L2start,int L2end)//分组归并 {int i=L1start,j=L2start;int temp[max],index=0;while(i<=L1end&&j<=L2end){if(rui[i]<=rui[j]){temp[index++]=rui[i++];}else{temp[index++]=rui[j++];}}while(i<=L1end){temp[index++]=rui[i++];}while(j<=L2end){temp[index++]=rui[j++];}for(int i=0;i<index;++i){rui[L1start+i]=temp[i];//注意i不能从0开始,二路的话右边那组起点可不是0 }}void MergeSort(int *str,int left,int right){if(left<right)//这是递归边界 {int mid=(left+right)/2;MergeSort(str,left,mid);MergeSort(str,mid+1,right);merge(str,left,mid,mid+1,right);}}using namespace std;int main(){int str[]={66,12,33,57,64,27,18,100,24,599};MergeSort(str,0,9);for(int i=0;i<10;++i){cout<<str[i]<<" ";} return 0;}



0 0