使用堆排序算法

使用堆排序算法(升序,建大堆顶)完善此程序。(注:截图为堆排序初始化后的大堆顶结果,详见源代码)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 10

void 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都没反应过来。。。

更多参考

修修修也大佬

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值