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

     1 /**
     2  * 排序算法之堆排序
     3 **/
     4 #include <iostream>
     5 #include <cstdio>
     6 #include <cstring>
     7 #include <algorithm>
     8 #include <vector>
     9 using namespace std;
    10 
    11 void adjust(vector<int>& vec, int len, int index) {
    12     int left = 2 * index + 1;
    13     int right = 2 * index + 2;
    14     int maxIdx = index; //代表父子三个数中最大数的下标
    15     if (left < len && vec[left] > vec[maxIdx]) maxIdx = left;
    16     if (right < len && vec[right] > vec[maxIdx]) maxIdx = right;
    17     if (maxIdx != index) {
    18         swap(vec[maxIdx], vec[index]);
    19         adjust(vec, len, maxIdx);
    20     }
    21 
    22 }
    23 
    24 void heapSort(vector<int>& vec, int size) {
    25     for (int i = size / 2 - 1; i >= 0; i--) {//从最后一个非叶节点开始进行堆调整
    26         adjust(vec, size, i);
    27     }
    28 
    29     for (int i = size - 1; i >= 1; i--) {
    30         swap(vec[0], vec[i]);
    31         adjust(vec, i, 0);
    32     }
    33 
    34 }
    35 
    36 int main() {
    37     vector<int> vec = {2,1,3,5,4};
    38     int len = vec.size();
    39     heapSort(vec, len);
    40     for (auto x : vec) {
    41         cout << x << endl;
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    动态生成java、动态编译、动态加载
    boostrap标签
    Java后端WebSocket的Tomcat实现
    编程过程与规范
    敏捷开发过程
    软件过程模型
    软件过程
    ISO9126 质量模型
    手机淘宝架构演化实践
    蒋勋:知识分子应具备怎样的美学修养
  • 原文地址:https://www.cnblogs.com/gousheng/p/8524982.html
Copyright © 2011-2022 走看看