#include<bits/stdc++.h>
using namespace std;int a[20]={9,5,12,3,6,44,55,221,15,51,69,100};int b[10086];//临时数组 void hb(int low,int mid,int high){ int n=high-low+1; int i=low,end1=mid; int j=mid+1,end2=high; int k=0; while(i<=end1&&j<=end2) { if(a[i]<=a[j]) b[k]=a[i++];//将a[i],a[j]较小的那个赋给b[k] ,改变if里的大小可以改变排序方式(从小到大或从大到小 else b[k]=a[j++]; k++; } while(i<=end1) b[k++]=a[i++];// while(j<=end2) b[k++]=a[j++]; for(int x=0;x<k;x++) a[low+x]=b[x];}void gbpx(int low,int high){ if(low<high) { int mid=low+(high-low)/2;//二分 gbpx(low,mid);//左递归 gbpx(mid+1,high);//右递归 hb(low,mid,high);//二路合并 }}int main(){ gbpx(0,11); for(int i=1;i<=10;i++) cout<<a[i]<<' '; return 0;}
注:老老实实地从0开始