堆排序

Posted yanbiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

#include <vector>
#include <iostream>
using namespace std;

//最大堆
void adjust(int i, vector<int>& array,int length) {
    while (i >= 0 && i < length / 2) {
        int max = i;
        if (2 * i + 1 < length) {
            max = array[i] > array[2 * i + 1] ? i : 2 * i + 1;
        }
        if (2 * i + 2 < length) {
            max = array[max] > array[2 * i + 2] ? max : 2 * i + 2;
        }
        if (max != i) {
            int tmp = array[i];
            array[i] = array[max];
            array[max] = tmp;
            i = max;
        }
        else {
            break;
        }
    }
}

void heapSort(vector<int>& array,int length) {
    for (int i = length / 2 - 1;i >= 0;i--) {
        adjust(i, array, length);
    }

    for (int i = 0;i < length -1;i++) {
        int tmp = array[0];
        array[0] = array[length - 1-i];
        array[length - 1 - i] = tmp;
        adjust(0, array, length - 1 - i);
    }
}

int main(void) {
    vector<int> array = { 49, 38, 65, 97, 76, 13, 27, 49 };
    int length = array.size();
    heapSort(array, length);
    
    for (int i= 0;i < length;i++) {
        cout << array[i] << " ";
    }

    system("pause");
}

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序