首页 > 编程语言 > 详细

归并排序

时间:2015-05-30 21:05:11      阅读:231      评论:0      收藏:0      [点我收藏+]

1.非递归版本

#include <iostream>
#include <string>
using namespace std;
void MergePass(int *arr,int *temp,int len,int step);
void merge(int *temp,int *arr,int low,int mid,int high);

void BottomUpSort(int *arr,int len){
    int step=1;
    int *temp=new int[len];
    while(step<len){
        MergePass(arr,temp,len,step);
        step=step*2;
    }
}
void MergePass(int *arr,int *temp,int len,int step){
    int i=0;
    while(i+2*step<=len){
          merge(temp,arr,i,i+step-1,i+2*step-1);
          i=i+2*step;
    }
    if(i+step<len)
        merge(temp,arr,i,i+step-1,len-1);
}
void merge(int *temp,int *arr,int low,int mid,int high){
    int i=low;
    int j=mid+1;
    int k=0;
    while(i<=mid&&j<=high){
        if(arr[i]<arr[j])
            temp[k++]=arr[j++];
        else
            temp[k++]=arr[i++];
    }
        while(j<=high)
            temp[k++]=arr[j++];
        while(i<=mid)
            temp[k++]=arr[i++];
        for(int i=0;i<k;i++){
            arr[low+i]=temp[i];
        }
}
int main(){
    int arr[9]={112,34,45,21,3,6,89,11,67};
    BottomUpSort(arr,9);
    
    
}

 

归并排序

原文:http://www.cnblogs.com/kkshaq/p/4540965.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!