HeapSort

本文详细介绍了堆排序算法的基本原理,并提供了实现代码。通过构建堆、调整堆和排序过程,实现了高效的内部排序方法。

内部排序之堆排序,简单实现了下代码以备以后回顾

View Code
 1 #include<stdio.h>
 2 #include<assert.h>
 3 
 4 //堆采用数组实现并从0开始计数
 5 int HeapAdjust( int * pArray,int iLength,int iAdjustpoint );
 6 int BuildHeap( int * pArray,int iLength );
 7 int HeapSort( int * pArray,int iLength );
 8 
 9 int HeapAdjust( int * pArray,int iLength,int iAdjustpoint )//堆调整
10 {
11     assert( pArray != NULL && iLength>iAdjustpoint );
12     int iLarge = iAdjustpoint;
13     int iTempSwap = 0;
14     if ( (iAdjustpoint*2+1) < iLength )
15     {
16         if ( pArray[iAdjustpoint*2+1] > pArray[iLarge] )
17         {
18             iLarge = iAdjustpoint*2+1;
19         }
20     }
21     if ( (iAdjustpoint*2+2) < iLength )
22     {
23         if ( pArray[iAdjustpoint*2+2] > pArray[iLarge] )
24         {
25             iLarge = iAdjustpoint*2+2;
26         }        
27     }
28     if ( iLarge != iAdjustpoint )
29     {
30         iTempSwap = pArray[iLarge];
31         pArray[iLarge] = pArray[iAdjustpoint];
32         pArray[iAdjustpoint] = iTempSwap;
33         HeapAdjust( pArray,iLength,iLarge );
34     }
35     return 1;
36 }
37 
38 int BuildHeap( int * pArray,int iLength )//建堆,从最后一个非叶子节点pArray[iLength>>2-1]一直run到第一个非叶子节点pArray[0]
39 {
40     assert( pArray != NULL && iLength>0 );
41     int iStartRun = iLength>>2-1;
42     while ( iStartRun >= 0 )
43     {
44         HeapAdjust( pArray,iLength,iStartRun );
45         iStartRun--;
46     }
47     return 1;
48 }
49 
50 int HeapSort( int * pArray,int iLength )
51 {
52     int iStartRun = iLength-1;
53     int iTempSwap = 0;
54     while ( iStartRun >= 1 )
55     {
56         iTempSwap = pArray[0];
57         pArray[0] = pArray[iStartRun];
58         pArray[iStartRun] = iTempSwap;
59         iStartRun--;
60         HeapAdjust( pArray,iStartRun+1,0 );
61     }
62     return 1;
63 }
64 
65 int main()
66 {
67     int iArray[10] = {5,3,7,23,87,2,43,67,21,0};
68     BuildHeap( iArray,10 );
69     HeapSort( iArray,10 );
70     int iIter = 0;
71 
72     while ( iIter<10 )
73     {
74         printf( "%d ",iArray[iIter++] );
75     }
76     printf("\n");
77     return 1;
78 }

关键词:大根堆、HeapAdjust、BuildHeap、HeapSort

转载于:https://www.cnblogs.com/zhouyoulie/archive/2013/05/11/3073032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值