归并排序

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);
    
    
}

 

posted @ 2015-05-30 20:45  kkshaq  阅读(164)  评论(0编辑  收藏  举报