标签:
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