• [排序]堆排序!


    挖了好久的坑终于填了进来qaq

    大顶堆(从小到大排序):

    每次调整就是在这个节点上,找他的孩子们是否大于它,如果大于就交换位置,然后再从它的孩子的孩子里面重复这个过程,保证父亲是两个孩子中最大的,而两个孩子谁大不一定。

    刚开始初始化时,从第一个有孩子的父亲点出发,由下到上不断调整这个堆。

    (每次调整都是调整一个父亲点及其以下)想要调整所有的父亲点,要循环了。

    然后堆的第一个值就是最大值,把最大值和最后一位交换,然后在从n-1前面的数找最大的,也就是在n个数中次大的,放到n-1的位置上,就这样一直找。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #include<cstring>
     5 #include<map>
     6 #include<algorithm>
     7 #include<cmath>
     8 using namespace std; 
     9 int n, a[110];
    10 void adjust(int i,int n)
    11 {
    12     int child = 2 * i;
    13     while (child <= n)
    14     {
    15         if (child + 1 <= n && a[child] < a[child + 1])
    16             child++;
    17         if (a[child] < a[i])
    18             break;
    19         int t = a[child];
    20         a[child] = a[i];
    21         a[i] = t;
    22         i = child;
    23         child = 2 * i;
    24     }
    25 }
    26 void dui(int n)
    27 {
    28     for (int i = n / 2; i >= 1; i--)
    29         adjust(i, n);
    30     for (int i = n ; i > 1; i--)
    31     {
    32         int t = a[1];
    33         a[1] = a[i];
    34         a[i] = t;
    35         adjust(1,i-1);
    36     }
    37 }
    38 int main()
    39 {
    40     cin >> n;
    41     for (int i = 1; i <= n; i++)
    42         cin >> a[i];
    43     dui(n);
    44     for (int i = 1; i <= n; i++)
    45         cout << a[i] << " ";
    46 
    47     return 0;
    48 }
    View Code

    这样一写我发现,就是选择排序鸭,从n个数中找到最大的,放到最后,再从n-1个数找到次大的,放到倒数第二个位置上。而堆优化就是每个数只需要和他的孩子们比较就可以。

    时间复杂度是 O(nlogn)

    无序数组找第K小,堆排序

    找第K小

    No matter how you feel, get up , dress up , show up ,and never give up.
  • 相关阅读:
    Sudoku Solver [LeetCode]
    Populating Next Right Pointers in Each Node [LeetCode]
    Binary Tree Level Order Traversal [LeetCode]
    Clone Graph [LeetCode]
    Merge k Sorted Lists [LeetCode]
    Combinations [LeetCode]
    021 面向对象 一
    给图片加点料
    质数
    ex10 找出藏在字符串中的“密码”
  • 原文地址:https://www.cnblogs.com/Kaike/p/10039192.html
Copyright © 2020-2023  润新知