使用堆排序算法(升序,建大堆顶)完善此程序。(注:截图为堆排序初始化后的大堆顶结果,详见源代码)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10void input(int a[], int n);
void output(int a[], int n);
void sort(int a[], int n);
void heapadjust(int a[], int loc, int n);int main(void)
{int a[N];input(a, N);sort(a, N);output(a, N);return 0;
}void input(int a[], int n)
{int i;printf("Input:\n");for (i = 0; i < n; i++){scanf("%d", &a[i]);}
}void output(int a[], int n)
{int i;printf("Output:\n");for (i = 0; i < n; i++){printf("%d ", a[i]);}printf("\n");
}void sort(int a[], int n)
{int i;//int temp; //将原始序列初始化为大堆顶 for (i = (n-1)/2; i >= 0; i--){heapadjust(a, i, n-1); } /* //本段程序是交换第一个和当前最后一个,然后再调整为堆,取消注释则是完整排序算法for (i = n - 1; i >= 1; i--){temp = a[0];a[0] = a[i];a[i] = temp;heapadjust(a, 0, i-1); } */
}void heapadjust(int a[], int loc, int n)
{/******start******/int t;int left=2*loc+1, right=2*loc+2;int large = loc;if (left<n && a[left]>a[large]) {large = left;}if (right<n && a[right]>a[large]) {large = right;}//最大值不是根结点if (large != loc) {t = a[large];a[large] = a[loc];a[loc] = t;//交换一下heapadjust(a,large,n);//调整子树}/******end******/
}
六级考炸了。回想这一年真没有好好碰英语,全靠考前突击了三天,背小红书上的单词和句型。听力果然一个都没听出来,对答案的时候发现臆想的几个答案全是错的,不如直接按首先念的某些单词选选项。早知道去年就把六级过了,这一年英语已经返祖了,那天背单词连language都没反应过来。。。