#include <iostream>
using namespace std;
template <class T>
int getSize(T &a) {
return sizeof(a)/sizeof(*a);
}
void merge(int source[], int target[],int start,int mid,int end) {
int i=start;
int j=mid+1;
int k=start;
for(;i<=mid&&j<=end;k++) {
if(source[i]<source[j]){
target[k]=source[i];
i++;
} else {
target[k]=source[j];
j++;
}
}
for(;i<=mid;i++){
target[k]=source[i];
k++;
}
for(;j<=end;j++){
target[k]=source[j];
k++;
}
}
void merge_sort(int source[], int target[], int start, int end) {
if (start==end) {
target[start] = source[start];
} else {
int mid = (start + end)/2;
int tmp[end-start+1];
merge_sort(source,tmp,start,mid);
merge_sort(source,tmp,mid+1,end);
merge(tmp,target,start,mid,end);
}
}
int main () {
int a[8] = {50, 10, 20, 30, 70, 40, 80, 60};
int b[8];
merge_sort(a, b, 0, getSize(a)-1);
for(int i = 0; i < getSize(b); i++ ) {
cout<<b[i]<<' ';
}
cout<<endl;
return 0;
}
c++ 归并排序
最新推荐文章于 2022-09-03 21:44:21 发布