码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2020-02-13 17:36:19      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:col   ++   ace   lse   ios   bre   system   void   class   

#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");
}

 

堆排序

标签:col   ++   ace   lse   ios   bre   system   void   class   

原文地址:https://www.cnblogs.com/yanbiao/p/12303885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!