voiddownAdjust(int low,int high){int i = low, j = i *2;while(j <= high){if(j +1<= high && a[j +1]> a[j]){
j = j +1;}if(a[j]> a[i]){swap(a[j], a[i]);
i = j;
j = i *2;}else{break;}}}voidheapSort(int a[],int n){for(int i = n /2; i >=0; i--){// 建堆downAdjust(i, n-1);}for(int i = n-1; i >0; i--){swap(a[i], a[0]);//交换heap[i] 与 堆顶downAdjust(0, i -1);}}
voidradixSort(int a[],int n){int maxn = a[0];for(int i =1; i < n; i ++){
maxn =max(a[i], maxn);}int d =0;while(maxn){
d++;
maxn /=10;}
d =pow(10, d);int k =1;int t[10][n];//桶for(int i =0; i <10; i++)for(int j =0; j < n; j++)
t[i][j]=0;int num[n];//记录每个桶中存入数的个数for(int i =0; i < n; i++)
num[i]=0;while(k < d){for(int i =0; i < n; i++){int m =(a[i]/ k)%10;
t[m][num[m]]= a[i];
num[m]++;}int c =0;for(int i =0; i < n; i++){if(num[i]!=0){for(int j =0; j < num[i]; j++){
a[c++]= t[i][j];}}
num[i]=0;}
k = k *10;}}