首页 > 编程语言 > 详细

堆排序【Heap Sort】

时间:2017-03-14 21:12:49      阅读:200      评论:0      收藏:0      [点我收藏+]
#include <iostream>
#include <algorithm>
using namespace std;
void MaxHeapify(int heap[], int root, int tail) {
    int p = root;
    int lch = p * 2 + 1;
    while (lch <= tail) {
        if (lch + 1 <= tail && heap[lch] < heap[lch + 1])
            lch++;
        if (heap[p] > heap[lch])
            return;
        else {
            std::swap(heap[p], heap[lch]);
            p = lch;
            lch = p * 2 + 1;
        }
    }
}
void HeapSort(int heap[], int sz) {
    // 从最后一个父节点(sz / 2 - 1)开始调整
    for (int i = sz / 2 - 1; i >= 0; --i)
        MaxHeapify(heap, i, sz - 1);
    /*由于堆也是用数组模拟的,故堆化数组后,第一次将A[0]与A[n - 1]交换,再对A[0…n-2]重新恢复堆。
    第二次将A[0]与A[n – 2]交换,再对A[0…n - 3]重新恢复堆,重复这样的操作直到A[0]与A[1]交换。
    由于每次都是将最小的数据并入到后面的有序区间,故操作完成后整个数组就有序了。有点类似于直接选择排序。*/
    for (int i = sz - 1; i > 0; --i) {
        std::swap(heap[0], heap[i]);
        MaxHeapify(heap, 0, i - 1);
    }
}
int main() {
    int Heap[] = { 3,2,6,7,4,5,9,8,1 };
    int sz = (int)sizeof(Heap) / sizeof(*Heap);
    HeapSort(Heap, sz);
    for (int i = 0; i < sz; ++i)
        std::cout << Heap[i] <<  ;
    return 0;
}

 

堆排序【Heap Sort】

原文:http://www.cnblogs.com/ray-coding-in-rays/p/6550649.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!