堆排序(6)
来源:互联网 发布:三星手机数据更新 编辑:程序博客网 时间:2024/06/06 10:40
1.理论参见:http://blog.csdn.net/genios/article/details/8157031
2.c代码:
/*************************************************************************> File Name: headSort.c> Author: NULL> Mail: 574889524@qq.com> Created Time: Mon 13 Oct 2014 08:46:11 PM CST ************************************************************************/#include<stdio.h>#define ARRSIZE 10/*************************************************/void ExChangeInt(int *a,int *b){ int temp = *a; *a = *b; *b = temp;}int Leaf(int i){ return 2*i+1;}int Right(int i){ return 2*i+2;}void PrintArr(int A[],int iLarg){ int i; for(i = 0; i < iLarg;++i) printf("%d ",A[i]); printf("\n");}/***********************************************/static int giHeapSize = ARRSIZE - 1;;void MaxHeapIfy(int *A,int i){ int iLargest; int iL = Leaf(i); int iR = Right(i); if((iL<=giHeapSize) && (A[iL] > A[i])) iLargest = iL; else iLargest = i; if((iR <=giHeapSize) && (A[iR] > A[iLargest])) iLargest = iR; if(iLargest != i){ ExChangeInt(&A[i],&A[iLargest]); MaxHeapIfy(A,iLargest); }}void BuildMaxHeap(int *A){ int i; for(i =(ARRSIZE-1)/2;i>=0;--i) MaxHeapIfy(A,i);}void HeapSort(int *A){ int i,iSize = ARRSIZE-1; BuildMaxHeap(A); for(i = iSize;i>=1;--i){ ExChangeInt(&A[0],&A[i]); giHeapSize--; MaxHeapIfy(A,0); }}/***********************************************/int main(){ int i,A[ARRSIZE] = {4,1,2,3,16,9,10,14,8,7}; HeapSort(A); PrintArr(A,ARRSIZE); return 0;}
0 0
- 排序6:堆排序
- 排序(6)堆排序
- 堆排序(6)
- 数据结构(6)堆排序
- 算法【6】:堆排序
- (6)堆排序
- 算法导论6:堆排序
- 6、堆排序HeapSort()+Sift()
- 第6章 堆排序
- 第6章 堆排序
- C++排序之堆排序(6)
- 排序算法6之堆排序
- 排序算法6——堆排序
- 排序算法(6)堆排序
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 【刷题小记198】数数
- GCD详解
- 概率和统计的matlab指令
- [LeetCode]Insert Interval
- Windows下VMWare虚拟机串口设置
- 堆排序(6)
- 学到的工作方法,望助你一臂之力
- web前端性能优化–缓存
- HDU 1540 Tunnel Warfare(线段树)
- 学习笔记 static
- 长连接和短连接性能测试结果差异
- 优先队列解决最短路问题
- android ContentResolver详解
- hdu 5047 大数找规律