码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2015-05-30 21:07:17      阅读:144      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!