博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构-堆(应用篇)之堆排序法-C和C++的实现
阅读量:5159 次
发布时间:2019-06-13

本文共 1099 字,大约阅读时间需要 3 分钟。

堆排序

关于堆的内容我们已经在上一节中了解了,本节中将给出一个堆的应用-堆排序。

关于堆的概念可以看上一节,入口:

堆排序属于一种选择排序:

步骤如下:

  1. 把待排序的数据构建成大顶堆(从大到小排序)。
  2. 把堆顶的数据拿出放在数组的第一个元素中。
  3. 使用下沉的方法整理堆中的数据。
  4. 循环第2,3步,直到堆中所有数据都取出来为止。

这个算法的优缺点如下

优点:时间复杂度低,其中建立堆最多循环了nlong2(n)/2次,时间复杂度为O(nlog2(n)),同样后面重新排序的时间复杂度为O(nlong2(n)),所以整个算法的复杂度为O(nlog2(n))。

缺点:需要建堆,操作繁琐。

综上所述,本排序算法适合排列大量数据时使用。

 


 

C语言

 

取出堆顶元素并把它从堆中删除:

bool MaxHeap_getTopAndMoveIt(MaxHeap *heap,MAXHEAP_ELEM *elem){    *elem = heap->iDatas[0];    MaxHeap_pop(heap,0);    return true;}
  • MaxHeap_pop()函数为从堆中删除某个数。在上一节中讲过这里不再赘述。

堆排序:

bool HeapSort(MAXHEAP_ELEM buff[],int length){    int i;    MaxHeap heap={
0}; if(length<=0) return false; MaxHeapConstructByBuffer(&heap,buff,10); for(i=0;i

 

  • MaxHeapConstrucByBuffer()函数的作用是把buff[]中的数据建立成堆。在上一节中讲过这里不再赘述。
  • MaxHeap_getTopAndMoveIt()函数的作用是取出堆顶的元素并放在buff[]的最前边。在堆中,堆顶的的元素为最大值。

测试:

使用堆排序的方法将buffer中的数据从大到小排列:

int main(){    int i;    int buffer[10]={
0,1,2,3,4,5,6,7,8,9}; HeapSort(buffer,10); for(i=0;i<10;i++) { printf("%d ",buffer[i]); } system("pause"); return 0;}

 

程序运行结果:

 

转载于:https://www.cnblogs.com/HongYi-Liang/p/7910028.html

你可能感兴趣的文章
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>
【更新】智能手机批量添加联系人
查看>>
NYOJ-128前缀式计算
查看>>
深入理解 JavaScript 事件循环(一)— event loop
查看>>
Hive(7)-基本查询语句
查看>>
注意java的对象引用
查看>>
C++ 面向对象 类成员函数this指针
查看>>
NSPredicate的使用,超级强大
查看>>
自动分割mp3等音频视频文件的脚本
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
js编码
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>