[数据结构] 堆排序算法
来源:互联网 发布:微信机器人 java 编辑:程序博客网 时间:2024/04/30 11:53
#include <iostream>#define MAX_SIZE 100using namespace std;typedef int keytype; typedef struct records //排序类型 {keytype key;//fields other; };typedef records LIST[MAX_SIZE]; //排序数组void Swap(records &x, records &y){records temp;temp = x;x = y;y = temp;}void PushDown(LIST list, int first, int last)//整理堆,把list[first]中的数据推到堆中的适当位置 {int r;r = first;while(r <= last/2){if((r == last/2) && (last%2 == 0))//r有一个儿子,在2*r { if(list[r].key > list[2*r].key) Swap(list[r], list[2*r]);r = last; }else if((list[2*r].key < list[r].key) && (list[2*r].key <= list[2*r+1].key)) //将list[r]和左儿子交换 { Swap(list[r], list[2*r]); r = 2*r; } else if((list[r].key > list[2*r+1].key) && (list[2*r+1].key < list[2*r].key)) //将list[r]和右儿子交换 { Swap(list[r], list[2*r+1]); r = 2*r+1; } else r = last; }}void Sort(int n, LIST list)//堆排序,将数组元素A[1],…,A[n]排成不增的序列 { int i; for(i = n/2; i >= 1; i--)//初始建堆 PushDown(list, i, n); for(i = n; i >= 2; i--) { Swap(list[1], list[i]);//取出堆中最小元素 PushDown(list, 1, i-1);//整理堆 }}int main(){LIST list;int i;cout << "Input the number of array:" << endl;cin >> list[0].key;for(i = 1; i <= list[0].key; i++) cin >> list[i].key; Sort(list[0].key, list); for(i = 1; i <= list[0].key; i++) cout << list[i].key;return 0;}
0 0
- 【数据结构&&算法】堆排序
- [数据结构] 堆排序算法
- 【数据结构与算法】堆排序
- 堆排序 | 数据结构与算法
- 【数据结构与算法】堆排序
- 数据结构与算法:堆与堆排序
- 数据结构与算法-堆与堆排序
- 数据结构之排序算法(一)-堆排序
- 数据结构排序算法之堆排序
- 数据结构排序算法——堆排序
- 算法与数据结构之堆排序
- 数据结构与算法之六堆排序
- 数据结构+算法系列四:I 堆排序
- 数据结构与算法——堆排序
- 《数据结构与算法》之堆排序
- 算法与数据结构学习 09 堆排序
- 数据结构:堆排序算法的实现
- 数据结构与算法——堆排序
- $事件委托
- sql
- java基础知识
- 查看自己linux版本使用的文件系统格式
- XCode 无法输出完整的长字符串
- [数据结构] 堆排序算法
- java中的深拷贝与浅拷贝
- c++中的左移、右移运算
- Dijkstra算法
- Java基础之Object
- WIN7系统IIS配置与问题处理之一
- 日拱一卒(三十八)
- 利用python生成一个导出数据库的bat脚本文件
- Cocoa cola——Cocoa Framework之原型模式