原地归并排序(Spot Merge Sort)
原地归并排序
类似归并排序,只是不需要辅助空间。
示例代码
#include<iostream>
using namespace std;
int swap(int ds[],int begin,int mid,int end){
int lb=begin;
for(int rb=mid;rb<end;rb++){
int temp=ds[rb];
int i=rb;
for(;i>lb;i--)
ds[i]=ds[i-1];
ds[i]=temp;
lb++;
}
return 0;
}
int spotMerge(int ds[],int begin,int mid,int end){
int i=begin,j=mid+1,index=mid+1;
while(i<j && i<=end && j<=end){
while(ds[i]<ds[j] &&i<j)
i++;
while(ds[j]<ds[i] &&j<=end)
j++;
swap(ds,i,index,j);
}
return 0;
}
int mySpotMergeSort(int unSorted[],int begin,int end){
if(begin<end){
int mid=(begin+end)/2;
mySpotMergeSort(unSorted,begin,mid);
mySpotMergeSort(unSorted,mid+1,end);
spotMerge(unSorted,begin,mid,end);
}
return 0;
}
int main(){
int data[7]={1,2,3,4,5,6,7};
mySpotMergeSort(data,0,6);
return 0;
}
浙公网安备 33010602011771号