归并排序
是分治法的一个典型应用。字面理解,就是递归+合并。
直接看例子
#include <iostream>
using namespace std;
const int MAXN = 9;
int a[MAXN] = {5,8,5,6,4,9,12,38,77};
int temp[MAXN];//辅助数组
int i,j,k;
void mergSort(int s,int e){
//递归边界
if(s == e) return;
//分
int mid = e + ((s - e) >> 1);
mergSort(s,mid);
mergSort(mid+1,e);
//治
i = s, j = mid + 1,k = s;
while(i <= mid && j <= e){
if(a[i] > a[j]){
temp[k++] = a[j++];
} else{
temp[k++] = a[i++];
}
}
//检查左边是否为空
while(i <= mid){
temp[k++] = a[i++];
}
//检查右边是否为空
while(j <= e){
temp[k++] = a[j++];
}
//复制
for(i = s; i <= e; i++)
a[i] = temp[i]; //将排序好的辅助数组赋值到a数组中
}
int main(){
mergSort(0,8);
for(i = 0; i <= 8; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}