⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort_hp.c

📁 该文件夹中包含了大部分经典的算法的源程序代码
💻 C
字号:
/* file name: sort_hp.c */
/* 堆排序 */

#include <stdio.h>

void adjust(int, int);
int data[11] = {0, 75, 23, 98, 44, 57, 12, 29, 64, 38, 82};

void main()
{
	int i, k, temp;
	printf("\n<< Heap sort >>\n");
	printf("\nNumber : ");
	for(k = 1; k <= 10; k++)
		printf("%d  ", data[k]);
	puts("");
	for(k = 0; k < 60; k++) printf("-");
	for(i = 10/2; i > 0; i--)
		adjust(i, 10);
	printf("\nHeap   : ");
	for(k = 1; k <= 10; k++)
		printf("%d  ", data[k]);
	for(i = 9; i > 0; i--)
	{
		temp = data[i+1];
		data[i+1] = data[1];
		data[1] = temp;    /* 将树根和最后的节点交换 */
		adjust(1, i);      /* 再重新调整为堆树 */
		printf("\nAccess : ");
		for(k = 1; k <= 10; k++)
			printf("%d  ", data[k]);
	}
	puts("");
	for(k = 0; k < 60; k++) printf("-");
	printf("\nSorting: ");
	for(k = 1; k <= 10; k++)
		printf("%d  ", data[k]);
}

void adjust(int i, int n)   /* 将数据调整为堆树 */
{
	int j, k, done = 0;
	k = data[i];
	j = 2*i;
	while((j <= n) && (done == 0))
	{
		if((j < n) && (data[j] < data[j+1])) j++;
		if(k >= data[j]) done = 1;
		else
		{
			data[j/2] = data[j];
			j *= 2;
		}
	}
	data[j/2] = k;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -