/** * @brief al[0 ~ num-1]为大顶堆,将al[num]插入堆中并保持堆性质 * * */int adjustHeap(int * al, int num){ if (NULL == al || 0 > num) return -1; if (0 == num) return 0; int i = num - 1; int p = (i-1)/2; while (i != 0) { if (al[i] > al[p]) { swap(al, i, p); i = p; p = i / 2; continue; } else { break; } } return 0;}/** * @brief 对长度为num的无序整数数组al建立为大顶堆 * * */int createHeap(int * al, int num){ if (NULL == al || 0 > num) return -1; if (2 > num) return 0; for (int i=1; i<num; ++i) { adjustHeap(al, i + 1); } dumpList(al, num, "heap: "); return 0;}/** * @brief 对al[0, num-1]的堆调整,调整前al[0]不符合规则 */ int adjustHeap2(int * al, int num) { int i = 0; int lc = i * 2 + 1; while (lc < num) { int rc = lc + 1; int maxc = lc; if (rc < num && al[rc] > al[lc]) { maxc = rc; } if (al[i] < al[maxc]) { swap(al, i, maxc); i = maxc; lc = i * 2 + 1; } else { break; } } return 0;}/** * @breif 对长度为num的al整数数组进行堆排序,排序后的结果覆盖在al数组上 * * */int heapSort(int * al, int num){ if (NULL == al || 0 > num) return -1; if (2 > num) return 0; createHeap(al, num); for (int i=num-1; i>0; --i) { swap(al, i, 0); adjustHeap2(al, i); } return 0;}
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 |
|
常用链接
留言簿
随笔档案(4)
文章分类(15)
文章档案(16)
搜索
积分与排名
最新随笔
最新评论
阅读排行榜
评论排行榜
|
|