堆排序求助
  • 板块学术版
  • 楼主FinalCrack
  • 当前回复15
  • 已保存回复15
  • 发布时间2021/10/8 15:20
  • 上次更新2023/11/4 04:21:23
查看原帖
堆排序求助
427122
FinalCrack楼主2021/10/8 15:20

自己稍微研究了一下

但不知道写的对不对

下面是代码

/*自主钻研HEAPSORT*/
#include <bits/stdc++.h>

using namespace std; 

/*	首先我们要建堆,堆是一个二叉树; 
	先举一个例子; 
									1
					2								3
			4				5				6				7
		8		9		10		11		12		13		14		15
	如何寻找一个节点的父亲呢?; 
	对了,就是把这个数给除以2;
	找子节点也只需要乘2加1或不加;
	然后是建堆; 
	堆要怎么建呢?; 
	我们先模拟一段数字吧;
	549812
	好,就用这串字母模拟吧;
	现在建堆;
					5
			4				9
		8		1		2
	我们首先,最上值是6,于是我们先看3;
	2<9,故我们不交换,再看2;
	8>1,8>4,更改; 
					5
			8				9
		4		1		2
	之后就到1了;
	9>1;
					9
			8				5
		4		1		2	 
	然后9挪到最后;
	 				2
			8				5
		4		1		9
	9消失,最大--,重复上述;
	大概能写出来了; 
*/ 

int a[114514];

void msort(int a[],int s)
{
	if (s == 1)	return;
	else
	{
		for (int i = s; i > 1; i--)
		{
			if (a[i] > a[i/2])
				swap(a[i/2], a[i]);
		}
		swap(a[1], a[s]);
		for (int i = 1; i <= 9; i++)
			cout<<a[i]<<" ";
		cout<<endl;
		s--;
		msort(a, s);
	}
	
}

int main(void)
{
	for(int i = 1; i <= 9; i++)
		cin>>a[i];
	msort(a, 9);
	for (int i = 1; i <= 9; i++)
		cout<<a[i]<<" ";
	return 0;
} 	/*HERE IS FINALCRACK*/

求求大佬指教一下www

2021/10/8 15:20
加载中...