• 好理解的堆排序


    对于堆排序,其实就是一个路径上的冒泡的过程,所以可以用这个思想去写代码,

    思路:每次父节点都和他的左子树和右子树比较,三者中最大的那个与父节点交换位置,这样递归之后根节点存放的就是该次遍历最大的值,之后将根节点与最后的节点交换,在进行查找(0~(lenth-1))中的最大值与倒数第二个交换位置就OK了。这样自己比较好理解。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void swap(int &a, int &b){
     5     int tmp = a;
     6     a = b;
     7     b = tmp;
     8 }
     9 
    10 int findmax(int a[],int lenth,int i){
    11     //找到第i个节点所代表的子树中的最大值
    12     if(2*(i) >= lenth) return a[i];
    13     int left, right,max;
    14     int rightmax,leftmax;
    15     rightmax = leftmax = max =0;
    16     right = 2*i+1;
    17     left = 2*i;
    18     if(i == 0){
    19         right = 2;
    20         left = 1;
    21     }
    22     leftmax = findmax(a,lenth,left);
    23     if(right < lenth){
    24         rightmax = findmax(a,lenth,right);
    25     }
    26     if(leftmax > rightmax && leftmax > a[i])swap(a[i],a[left]);
    27     if(rightmax > leftmax && rightmax > a[i])swap(a[i],a[right]);
    28     return a[i];
    29 }
    30 
    31 int* heapSort(int a[], int lenth){     
    32     int max;
    33     for(int i = 0; i < lenth; i++){
    34         max = findmax(a, lenth-i, 0);
    35         swap(a[0], a[lenth-i-1]);
    36     }
    37     return a;
    38 }
    艰难的成长
  • 相关阅读:
    DNS欺骗&嗅探监听
    linux下的ARP攻击(kali)
    隐匿攻击
    跨边界传输之反弹shell
    跨边界传输之内网代理
    跨边界传输之端口转发
    权限维持
    内网提权-服务篇
    内网提权-系统篇
    Laxcus大数据管理系统2.0(14)- 后记
  • 原文地址:https://www.cnblogs.com/marylins/p/3588728.html
Copyright © 2020-2023  润新知