标签:rgb 内容 堆排 nbsp amp min void pre main
实验内容
【问题描述】对一含有n个整数的数组,使用堆排序将其由小到大排序。
【输入形式】第一行为元素个数n,第二行为n个整数(以空格隔开)。
【输出形式】输出n个整数(以空格隔开)
【样例输入】
6
43 2 56 1 22 9
【样例输出】
1 2 9 22 43 56
#include <stdio.h> #include <stdlib.h> int Min(int a,int b,int c){ if (a<=b) { if (a<=c) { return 0; } else { return 2; } } else { if (b<=c) { return 1; } else { return 2; } } } int Min1(int a,int b){ if (a<=b) { return 0; } else { return 1; } } void heapsort2(int *arr,int length){ int sta=length/2; int temp1; int temp2; int temp3; int temp4; int temp5; int i; for (i = sta; i >0; i--) { temp5=i; while(temp5<=sta) { temp1=2*temp5; temp2=2*temp5+1; if (temp2<=length) { temp3=Min(arr[temp5],arr[temp1],arr[temp2]); if(temp3==0){ break; } if (temp3==1) { temp4=arr[temp5]; arr[temp5]=arr[temp1]; arr[temp1]=temp4; temp5=temp1; } if (temp3==2) { temp4=arr[temp5]; arr[temp5]=arr[temp2]; arr[temp2]=temp4; temp5=temp2; } } else { temp3=Min1(arr[temp5],arr[temp1]); if (temp3==1) { temp4=arr[temp5]; arr[temp5]=arr[temp1]; arr[temp1]=temp4; temp5=temp1; } else{ break; } } } } } int main(){ int num=0; int i; int num1; scanf("%d",&num); int *arr=(int *) malloc(sizeof(int)*(num+1)); arr[0]=0; for (i = 1; i <= num; i++) { scanf("%d", &arr[i]); } num1=num; for (i = 1; i <= num; i++) { heapsort2(arr,num1); arr[0]=arr[num1]; arr[num1]=arr[1]; arr[1]=arr[0]; printf("%d",arr[num1]); if (num1!=1) { printf(" "); } num1=num1-1; } return 0; }
好了,我们下回见,peace
标签:rgb 内容 堆排 nbsp amp min void pre main
原文地址:https://www.cnblogs.com/gitpy123/p/13972417.html