编辑代码

#include <stdio.h>
#include <stdlib.h>
#define MaxSum 200
void CreatDui(int* Dui);
void AdjustDui(int* Dui,int index,int max);
void DuiSort(int*Dui);
int main () {
    int Dui[MaxSum+1];
    for(int i = 1 ; i <= MaxSum;i++){
        Dui[i] = rand()%(MaxSum*3);
        // printf("%d,",Dui[i]);
    }

    DuiSort(Dui);

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

    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
	printf("\nHello JSRUN!   \n\n         - from C .");
	return 0;
}

void DuiSort(int*Dui){
    CreatDui(Dui);
    for(int i = MaxSum;i > 0; i--){
        int c = Dui[1];
        Dui[1] = Dui[i];
        Dui[i] = c;
        AdjustDui(Dui,1,i-1);
    }
}

//Father is i
void CreatDui(int* Dui){
    int mid = MaxSum/2;
    // printf("\n\n%d",mid);
    for(int i = mid;i > 0;i--){
        AdjustDui(Dui,i,MaxSum);
    }
}

//BigDui
void AdjustDui(int* Dui,int index,int max){
    if(index>max/2) return;
    if(index*2+1 <= max){
        int lrflag = Dui[2*index] < Dui[2*index+1];//
        int theMax = Dui[2*index]>Dui[2*index+1]
            ?Dui[2*index]:Dui[2*index+1];
        // printf("\n%d",index);
        if(Dui[index] > theMax) return;

        Dui[2*index+lrflag] = Dui[index];
        Dui[index] = theMax;

        AdjustDui(Dui,2*index+lrflag,max);            
    }
    if(Dui[index] < Dui[2*index]){
        int c = Dui[index];
        Dui[index] = Dui[2*index];
        Dui[2*index] = c;   

        // printf("%d||",c);     
    }

    return;
}