前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c-堆排序

c-堆排序

作者头像
kdyonly
发布2023-03-03 19:21:02
2250
发布2023-03-03 19:21:02
举报
文章被收录于专栏:个人编程笔记个人编程笔记

浏览量 1

堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 本次主要来学习一下关于堆排序算法,本代码参考了白话经典算法的堆与堆排序,里面讲了堆的操作和堆排序,需要了解详细的请阅读原文。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
void MinHeapFixdown(int a[],int i,int n)
{
	int j,temp;
	temp=a[i];
	j=2*i+1;
	while(j<n)
	{
		if(j+1<n&&a[j+1]<a[j])
			j++;
		if(a[j]>=temp)
			break;
		a[i]=a[j];
		i=j;
		j=2*i+1;
	}
	a[i]=temp;
}
//建立最小堆
void MakeMinHeap(int a[],int n)
{
	for(int i=n/2-1;i>=0;i--)
		MinHeapFixdown(a,i,n);
}
//堆排序(从大到小)
void MinHeapsort(int arr[],int n)
{
	for(int i=n-1;i>=1;i--)
	{
		int temp=0;
		temp=arr[0];
		arr[0]=arr[i];
		arr[i]=temp;
		MinHeapFixdown(arr,0,i);
	}
}
int main()
{
	int arr[10]={2,5,8,3,4,1,7,9,0,6};
    //将数组转换为最小堆形式
	MakeMinHeap(arr,10);
    //对其进行排序
	MinHeapsort(arr,10);
	for(int i=0;i<10;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

阅读原文

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档