堆排序的实现

#include  <stdio.h>
int arrarorg[] = { 49,38,65,97,76,
13,27,49,55,4 };

//建立最大堆
//n表示数组的元素位置,length表示数组长度
void maxheap(int h[], int n, int length) {
	int l = 2 * n + 1;
	//从数组0开始,和从1开始的左右孩子标志
	int r = 2 * n + 2;
	int max;//l,r,max都是数组角标

	int temp;
	if (l<length && h[l]>h[n])
		max = l;//表示左节点大
	else
		max = n;//根大

	if (r<length && h[r]>h[max])
		max = r;
	
	if (max != n) {
		temp = h[n];
		h[n] = h[max];
		h[max] = temp;
		maxheap(h, max, length);
	}

}


void heapsort(int h[], int length) {
	int i, temp;
	for (i = length / 2;i >= 0;i--) {
		maxheap(h, i, length);
	}
	for (i = length - 1;i >= 0;i--) {
		temp = h[0];
		h[0] = h[i];
		h[i] = temp;
		maxheap(h, 0, i - 1);
	}
}


int main(void) {

	heapsort(arrarorg, 10);
	for (int i = 0;i < 10;i++) {
		printf("%d ", arrarorg[i]);
	}
	getchar();
	return 0;
}

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值