堆排序
来源:互联网 发布:淘宝鞋子女款冬季学生 编辑:程序博客网 时间:2024/04/29 16:04
1.堆: 类似二叉树
数据组织方式->数组对象
2.种类: 最大堆->A[PARENT(i)] >= A[i]
最小堆->A[PARENT(i)] <= A[i]
3.建堆:Heap_max_Build
保持堆性质:Heap_max_Ify
堆排序:Heap_max_Sort
4.Code
#include <stdio.h>#include <assert.h>#define PARAEN(i) \(i) / 2#define LEFT(i) \2 * (i)#define RIGHT(i) \2 * (i) + 1void Heap_max_Display(int *piArray, int iSize){int iCnt = 0;assert(piArray != NULL);printf("Heap sequence: ");for (iCnt = 1; iCnt <= iSize; iCnt++){printf("%d ", piArray[iCnt]);}printf("\r\n");return;}void Heap_max_Ify(int *piArray, int iSize, int iPosition){int iLeft = 0;int iRight = 0;int iLargest = 0;int iSwapValue = 0;assert(piArray != NULL);assert(iPosition >= 1);iLeft = LEFT(iPosition);iRight = RIGHT(iPosition);iLargest = iPosition;printf("Heap max ify:%d %d %d %d start\r\n", iPosition, iLeft, iRight, iSize);Heap_max_Display(piArray, iSize);/* 小于堆的大小 */if ((iLeft <= iSize) && (piArray[iLeft] > piArray[iPosition])){iLargest = iLeft;}if ((iRight <= iSize) && (piArray[iRight] > piArray[iLargest])){iLargest = iRight;}if (iLargest != iPosition){iSwapValue = piArray[iLargest];piArray[iLargest] = piArray[iPosition];piArray[iPosition] = iSwapValue;printf("Swap position %d %d \r\n", iPosition, iLargest);printf("Swap value %d %d \r\n", piArray[iPosition], piArray[iLargest]);Heap_max_Ify(piArray, iSize, iLargest);}else{printf("No need swap\r\n");}printf("Heap max ify:%d %d %d %d finish\r\n", iPosition, iLeft, iRight, iSize);Heap_max_Display(piArray, iSize);return;}void Heap_max_Build(int *piArray, int iSize){int iCnt = 0;assert(piArray != NULL);printf("Heap max build size:%d start \r\n", iSize);for (iCnt = iSize / 2 ; iCnt >= 1; iCnt--){Heap_max_Ify(piArray, iSize, iCnt);}printf("Heap max build size:%d finish \r\n", iSize);return;}/* 构造一个最大堆,然后交换第一个和最后一个; 堆的大小减一; 重新构造堆; 依此类推 */void Heap_max_Sort1(int *piArray, int iSize){int iCnt = 0;int iHeapSize = 0;int iHeapValue = 0;assert(piArray != NULL);iHeapSize = iSize;for (iCnt = iHeapSize; iCnt >= 1; iCnt--){Heap_max_Build(piArray, iHeapSize);iHeapValue = piArray[iHeapSize];piArray[iHeapSize] = piArray[1];piArray[1] = iHeapValue;iHeapSize--;}return;}/* 构造最大堆; 交换最大值和最后一个值; 堆的大小减一; 继续保持堆的性质; 依此类推 复杂度:nlgn*/void Heap_max_Sort(int *piArray, int iSize){int iHeapSize = 0;int iHeapValue = 0;assert(piArray != NULL);Heap_max_Build(piArray, iSize);iHeapSize = iSize;/* 一直比较,直到剩下两个 */while (iHeapSize >= 2){iHeapValue = piArray[iHeapSize];piArray[iHeapSize] = piArray[1];piArray[1] = iHeapValue;iHeapSize--;Heap_max_Ify(piArray, iHeapSize, 1);}return;}int main(){int aiArray[12 + 1] = {0, 0, 2, 3, 4, 0, 8, 9, 6, 7, 0, 11, 12};Heap_max_Display(aiArray, 12);Heap_max_Sort(aiArray, 12);Heap_max_Display(aiArray, 12);return 0;}
5.运行结果:
Heap sequence: 0 2 3 4 0 8 9 6 7 0 11 12
Heap max build size:12 start
Heap max ify:6 12 13 12 start
Heap sequence: 0 2 3 4 0 8 9 6 7 0 11 12
Swap position 6 12
Swap value 12 8
Heap max ify:12 24 25 12 start
Heap sequence: 0 2 3 4 0 12 9 6 7 0 11 8
No need swap
Heap max ify:12 24 25 12 finish
Heap sequence: 0 2 3 4 0 12 9 6 7 0 11 8
Heap max ify:6 12 13 12 finish
Heap sequence: 0 2 3 4 0 12 9 6 7 0 11 8
Heap max ify:5 10 11 12 start
Heap sequence: 0 2 3 4 0 12 9 6 7 0 11 8
Swap position 5 11
Swap value 11 0
Heap max ify:11 22 23 12 start
Heap sequence: 0 2 3 4 11 12 9 6 7 0 0 8
No need swap
Heap max ify:11 22 23 12 finish
Heap sequence: 0 2 3 4 11 12 9 6 7 0 0 8
Heap max ify:5 10 11 12 finish
Heap sequence: 0 2 3 4 11 12 9 6 7 0 0 8
Heap max ify:4 8 9 12 start
Heap sequence: 0 2 3 4 11 12 9 6 7 0 0 8
Swap position 4 9
Swap value 7 4
Heap max ify:9 18 19 12 start
Heap sequence: 0 2 3 7 11 12 9 6 4 0 0 8
No need swap
Heap max ify:9 18 19 12 finish
Heap sequence: 0 2 3 7 11 12 9 6 4 0 0 8
Heap max ify:4 8 9 12 finish
Heap sequence: 0 2 3 7 11 12 9 6 4 0 0 8
Heap max ify:3 6 7 12 start
Heap sequence: 0 2 3 7 11 12 9 6 4 0 0 8
Swap position 3 6
Swap value 12 3
Heap max ify:6 12 13 12 start
Heap sequence: 0 2 12 7 11 3 9 6 4 0 0 8
Swap position 6 12
Swap value 8 3
Heap max ify:12 24 25 12 start
Heap sequence: 0 2 12 7 11 8 9 6 4 0 0 3
No need swap
Heap max ify:12 24 25 12 finish
Heap sequence: 0 2 12 7 11 8 9 6 4 0 0 3
Heap max ify:6 12 13 12 finish
Heap sequence: 0 2 12 7 11 8 9 6 4 0 0 3
Heap max ify:3 6 7 12 finish
Heap sequence: 0 2 12 7 11 8 9 6 4 0 0 3
Heap max ify:2 4 5 12 start
Heap sequence: 0 2 12 7 11 8 9 6 4 0 0 3
Swap position 2 5
Swap value 11 2
Heap max ify:5 10 11 12 start
Heap sequence: 0 11 12 7 2 8 9 6 4 0 0 3
No need swap
Heap max ify:5 10 11 12 finish
Heap sequence: 0 11 12 7 2 8 9 6 4 0 0 3
Heap max ify:2 4 5 12 finish
Heap sequence: 0 11 12 7 2 8 9 6 4 0 0 3
Heap max ify:1 2 3 12 start
Heap sequence: 0 11 12 7 2 8 9 6 4 0 0 3
Swap position 1 3
Swap value 12 0
Heap max ify:3 6 7 12 start
Heap sequence: 12 11 0 7 2 8 9 6 4 0 0 3
Swap position 3 7
Swap value 9 0
Heap max ify:7 14 15 12 start
Heap sequence: 12 11 9 7 2 8 0 6 4 0 0 3
No need swap
Heap max ify:7 14 15 12 finish
Heap sequence: 12 11 9 7 2 8 0 6 4 0 0 3
Heap max ify:3 6 7 12 finish
Heap sequence: 12 11 9 7 2 8 0 6 4 0 0 3
Heap max ify:1 2 3 12 finish
Heap sequence: 12 11 9 7 2 8 0 6 4 0 0 3
Heap max build size:12 finish
Heap max ify:1 2 3 11 start
Heap sequence: 3 11 9 7 2 8 0 6 4 0 0
Swap position 1 2
Swap value 11 3
Heap max ify:2 4 5 11 start
Heap sequence: 11 3 9 7 2 8 0 6 4 0 0
Swap position 2 4
Swap value 7 3
Heap max ify:4 8 9 11 start
Heap sequence: 11 7 9 3 2 8 0 6 4 0 0
Swap position 4 8
Swap value 6 3
Heap max ify:8 16 17 11 start
Heap sequence: 11 7 9 6 2 8 0 3 4 0 0
No need swap
Heap max ify:8 16 17 11 finish
Heap sequence: 11 7 9 6 2 8 0 3 4 0 0
Heap max ify:4 8 9 11 finish
Heap sequence: 11 7 9 6 2 8 0 3 4 0 0
Heap max ify:2 4 5 11 finish
Heap sequence: 11 7 9 6 2 8 0 3 4 0 0
Heap max ify:1 2 3 11 finish
Heap sequence: 11 7 9 6 2 8 0 3 4 0 0
Heap max ify:1 2 3 10 start
Heap sequence: 0 7 9 6 2 8 0 3 4 0
Swap position 1 3
Swap value 9 0
Heap max ify:3 6 7 10 start
Heap sequence: 9 7 0 6 2 8 0 3 4 0
Swap position 3 6
Swap value 8 0
Heap max ify:6 12 13 10 start
Heap sequence: 9 7 8 6 2 0 0 3 4 0
No need swap
Heap max ify:6 12 13 10 finish
Heap sequence: 9 7 8 6 2 0 0 3 4 0
Heap max ify:3 6 7 10 finish
Heap sequence: 9 7 8 6 2 0 0 3 4 0
Heap max ify:1 2 3 10 finish
Heap sequence: 9 7 8 6 2 0 0 3 4 0
Heap max ify:1 2 3 9 start
Heap sequence: 0 7 8 6 2 0 0 3 4
Swap position 1 3
Swap value 8 0
Heap max ify:3 6 7 9 start
Heap sequence: 8 7 0 6 2 0 0 3 4
No need swap
Heap max ify:3 6 7 9 finish
Heap sequence: 8 7 0 6 2 0 0 3 4
Heap max ify:1 2 3 9 finish
Heap sequence: 8 7 0 6 2 0 0 3 4
Heap max ify:1 2 3 8 start
Heap sequence: 4 7 0 6 2 0 0 3
Swap position 1 2
Swap value 7 4
Heap max ify:2 4 5 8 start
Heap sequence: 7 4 0 6 2 0 0 3
Swap position 2 4
Swap value 6 4
Heap max ify:4 8 9 8 start
Heap sequence: 7 6 0 4 2 0 0 3
No need swap
Heap max ify:4 8 9 8 finish
Heap sequence: 7 6 0 4 2 0 0 3
Heap max ify:2 4 5 8 finish
Heap sequence: 7 6 0 4 2 0 0 3
Heap max ify:1 2 3 8 finish
Heap sequence: 7 6 0 4 2 0 0 3
Heap max ify:1 2 3 7 start
Heap sequence: 3 6 0 4 2 0 0
Swap position 1 2
Swap value 6 3
Heap max ify:2 4 5 7 start
Heap sequence: 6 3 0 4 2 0 0
Swap position 2 4
Swap value 4 3
Heap max ify:4 8 9 7 start
Heap sequence: 6 4 0 3 2 0 0
No need swap
Heap max ify:4 8 9 7 finish
Heap sequence: 6 4 0 3 2 0 0
Heap max ify:2 4 5 7 finish
Heap sequence: 6 4 0 3 2 0 0
Heap max ify:1 2 3 7 finish
Heap sequence: 6 4 0 3 2 0 0
Heap max ify:1 2 3 6 start
Heap sequence: 0 4 0 3 2 0
Swap position 1 2
Swap value 4 0
Heap max ify:2 4 5 6 start
Heap sequence: 4 0 0 3 2 0
Swap position 2 4
Swap value 3 0
Heap max ify:4 8 9 6 start
Heap sequence: 4 3 0 0 2 0
No need swap
Heap max ify:4 8 9 6 finish
Heap sequence: 4 3 0 0 2 0
Heap max ify:2 4 5 6 finish
Heap sequence: 4 3 0 0 2 0
Heap max ify:1 2 3 6 finish
Heap sequence: 4 3 0 0 2 0
Heap max ify:1 2 3 5 start
Heap sequence: 0 3 0 0 2
Swap position 1 2
Swap value 3 0
Heap max ify:2 4 5 5 start
Heap sequence: 3 0 0 0 2
Swap position 2 5
Swap value 2 0
Heap max ify:5 10 11 5 start
Heap sequence: 3 2 0 0 0
No need swap
Heap max ify:5 10 11 5 finish
Heap sequence: 3 2 0 0 0
Heap max ify:2 4 5 5 finish
Heap sequence: 3 2 0 0 0
Heap max ify:1 2 3 5 finish
Heap sequence: 3 2 0 0 0
Heap max ify:1 2 3 4 start
Heap sequence: 0 2 0 0
Swap position 1 2
Swap value 2 0
Heap max ify:2 4 5 4 start
Heap sequence: 2 0 0 0
No need swap
Heap max ify:2 4 5 4 finish
Heap sequence: 2 0 0 0
Heap max ify:1 2 3 4 finish
Heap sequence: 2 0 0 0
Heap max ify:1 2 3 3 start
Heap sequence: 0 0 0
No need swap
Heap max ify:1 2 3 3 finish
Heap sequence: 0 0 0
Heap max ify:1 2 3 2 start
Heap sequence: 0 0
No need swap
Heap max ify:1 2 3 2 finish
Heap sequence: 0 0
Heap max ify:1 2 3 1 start
Heap sequence: 0
No need swap
Heap max ify:1 2 3 1 finish
Heap sequence: 0
Heap sequence: 0 0 0 2 3 4 6 7 8 9 11 12
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- .xstream的alias使用方法
- SDUT 2446 最终排名
- 嵌入式学习入门之路
- Activity生命周期
- Redis的高级应用-安全性和主从复制
- 堆排序
- RTC学习笔记
- Hive优化总结
- Evade antivirus convert shellcode to c
- Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)
- 请编写函数,删除一个字符串的一部分。
- cracking the code interview convert array to BST Python
- hibernate一对多单向关联
- Eclipse从数据库逆向生成Hibernate带注解的实体类