排序算法之堆排序

时间复杂度为O(NlogN)的排序算法有很多。

其中归并算法虽然时间短,但是需要的内存空间很大,因为其不断递归调用自身;而快速排序算法虽然平均情况下所花费时间也很短,但是在极端情况下,其时间复杂度为O(N²)。而堆排序呢,则是综合了这两者的优点,去除了这两者的缺点,所需要的内存空间不大,而且不管在什么情况下,其时间复杂度都为O(NlogN)。

而堆排序也是一种用到数据结构知识的排序算法,可见,数据结构这门课是非常重要的。

#include<iostream>
using namespace std;


void HeapAdjust(int *Array,int location,int size)
{
	int lChild = location * 2 + 1;
	int rChild = location * 2 + 2;
	int max = location;
	if(location <= size/2)
	{
		if(lChild<=size&&Array[lChild]>Array[max])
		{
			max = lChild;
		}
		if(rChild<=size&&Array[rChild]>Array[max])
		{
			max = rChild;
		}
		
		if(max!=location)
		{
			int temp = Array[location];
			Array[location] = Array[max];
			Array[max] = temp;
			HeapAdjust(Array, max, size);
		}
	}
}


void BuildHeap(int *Array,int size)
{
	int i;
	for(int i=size/2;i>=0;i--)
	{
		HeapAdjust(Array,i,size);
	}
}


void HeapSort(int *Array,int size)
{
	int i;
	BuildHeap(Array,size);
	for(i=size-1;i>=0;i--)
	{
		int temp = Array[0];
		Array[0] = Array[i];
		Array[i] = temp;
		HeapAdjust(Array,0,i-1);
	}
}


int main()
{
	int a[100],size;
	while(scanf("%d",&size)==1&&size>0)
	{
		for(int i=0;i<size;i++)
		{
			cin>>a[i];
		}
		HeapSort(a,size);
		
		for(int i=0;i<size;i++)
		{
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值