编辑代码

#include <stdio.h>
int main () {
    int a[9] = {-1,53,17,78,9,45,65,87,32};
   // Simpleselect(a,8);
  //  print_arr(a,8);
  Heapsort(a,9);
  print_arr(a,9);
	return 0;
}

void print_arr(int a[], int n){
   for(int i = 1 ; i < n ; i++){
       printf("%d ",a[i]);
   }
   printf("\n");
}

//简单选择排序
void Simpleselect(int a[] , int n){
    int min;
    for(int i = 0 ; i < n ; i++){
        min = i;
        for(int j = i+1 ; j < n ; j++){
            if(a[j] < a[min]) min = j;
        }
        if(min != i){
            int temp = a[i];
            a[i] = a[min];
            a[min] = temp;
        }
    }


}

//堆调整,调整为大根堆
void HeadAdjust(int a[],int k , int len ){
   a[0] = a[k];
   for(int i = 2*k ; i < len ; i*=2){
       if(i < len-1 && a[i] < a[i+1]) i++;
        if(a[0] >= a[i]) break;
        else {
            a[k] = a[i];
            k = i;
        }
   }
   a[k] = a[0];
    return ;
}

//堆排序
void Heapsort(int a[],int n){
    for(int i = n/2 ; i > 0 ; i--){
        HeadAdjust(a,i,n);
    }

    for(int i = n-1 ; i > 1 ; i--){
        a[0] = a[i];
        a[i] = a[1];
        a[1] = a[0];
        HeadAdjust(a,1,i);
    }

    return ;
}