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

📄 heapsort.h

📁 各种排序方法源码
💻 H
字号:
#include<string.h>
//----------------------------调大顶堆函数-------------------------------------------//
void heapadjust(node *d,int s,int m,int &jc,int &bc)
{//已知d[s...m]中记录的关键字除之d[s]外均满足堆的定义,本函数调整d[s]的关键字,使成为一个大顶堆
	node p;
	int j;
	p.data=d[s].data;
    strcpy(p.c,d[s].c);
	jc++;
	for(j=2*s;j<=m;j*=2)   //沿关键字较大的孩子结点向下筛选
	{
		bc++;
		if(j<m&&(d[j].data<d[j+1].data)) {j++;bc++;}  //j为关键字较大记录的下标
		if(p.data>=d[j].data) {bc++;break;}     //p应插入在位置s上
		d[s].data=d[j].data;
        strcpy(d[s].c,d[j].c);
		jc++;
		s=j;
	}
    d[s].data=p.data;       //插入
	strcpy(d[s].c,p.c);
	jc++;
}
//-------------------------------堆排序函数-----------------------------------------//
void heapsort(node *d,int num,int &jc,int &bc)
{//对顺序表d进行堆排序
	int i;
	node p;
	for(i=num/2;i>0;--i)    //把d建成大顶堆
	{
		bc++;
		heapadjust(d,i,num,jc,bc);
	}
	for(i=num;i>1;--i)
	{
		jc+=3;bc++;
		p.data=d[1].data;    //将堆顶记录和当前未经排序的1从i到的子列的最后一个记录交换
		strcpy(p.c,d[1].c);
		d[1].data=d[i].data;
        strcpy(d[1].c,d[i].c);
		d[i].data=p.data;
		strcpy(d[i].c,p.c);
		heapadjust(d,1,i-1,jc,bc);   //把d[1.....i-1]重新调整为大顶堆
	}
}

⌨️ 快捷键说明

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