zoukankan      html  css  js  c++  java
  • 堆排序

    #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");
    }
    作者:严彦彪 原创作品转载请注明出处
  • 相关阅读:
    不同压测场景的区别
    常用的re模块的正则匹配的表达式
    了解爬虫
    robots.txt 协议
    vue前台配置
    短信验证码的使用
    创建表
    数据库配置
    后台:Django项目创建
    虚拟环境的搭建
  • 原文地址:https://www.cnblogs.com/yanbiao/p/12303885.html
Copyright © 2011-2022 走看看