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 删除文件目录
    java导出echart图到excel 多张图片导出
    java导出sql文件
    split方法使用
    jqgrid列表添加单选框
    会消失的链接
    运用javascript做出链接类特效
    创建守护进程的步骤
    ext2文件系统
    C++枚举类型enum
  • 原文地址:https://www.cnblogs.com/gousheng/p/8524982.html
Copyright © 2011-2022 走看看