算法导论03--堆实现优先级队列

该博客主要探讨了如何利用堆实现优先级队列,并通过实例展示了不同输入顺序对元素排序的影响。作者生成了多个规模的随机数,构建优先级队列并分析了运行时间,揭示了规模对效率的直接影响。实验中使用了C/C++环境,并提供了源代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目的

1.熟悉算法设计的基本思想
2.掌握优先级队列的方法

二、内容与设计思想

  1. 利用堆实现优先级队列;
  2. 按照顺序插入1,3,5,7,9,2,4,6,8,10,11,13,15,12,14,构建优先级队列,打印出整个数组的内容;
  3. 按照顺序插入9,7,10,12,5,4,2,1,15,14,3,7,8,6,11,13,构建优先级队列,打印出整个数组的内容,并且体会不同输入顺序的情况之下数组内元素排序的差异;
  4. 随机生成1000、10000、100000、1000000个数,分别构建优先级队列,画图描述不同情况下的运行时间差异。

三、使用环境

推荐使用C/C++集成编译环境。

四、实验过程

1、写出矩阵生成器和算法的源代码;

#include<bits/stdc++.h>
using namespace std;
#define MaxData 1000001

typedef struct HeapStruct
{
	int size;
	int* x;
} MaxHeap;

typedef struct Heap
{
	int m;
} IntHeap;

void PercDown(MaxHeap* H,int p)
{
	int Parent,Child,X;
	
	X=H->x[p];
	for (Parent=p;Parent*2<=H->size;Parent=Child)
	{
		Child=Parent*2;
		if (Child!=H->size && H->x[Child]<H->x[Child+1])
		{
			Child++;
		}
		
		if (X>H->x[Child])
		{
			break;
		}
		else
		{
			H->x[Parent]=H->x[Child];
		}
	}
	H->x[Parent]=X;
}

void BuildHeap(MaxHeap* H)
{
	int i;
	
	for (i=H->size/2;i>0;i--)
	{
		PercDown(H,i);
	}
}

int main()
{
	MaxHeap* H=new MaxHeap;
	H->x=new int[MaxData];
	int size=0;
	cin>>size;
	H->size=size;
	H->x[0]=1000001;
	srand(time(0));
	for (int i=1;i<=size;i++)
	{
		int x;
    	x=rand()%1000000;
		H->x[i]=x;
	}
	
	clock_t startTime,endTime;
	startTime = clock();
    
    BuildHeap(H);
    endTime = clock();
    cout << "The run time is:" <<(double)(1000*(endTime - startTime) / CLOCKS_PER_SEC) << "ms" << endl; 
	
	return 0;
}

2、分别画出各个实验结果的折线图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值