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

    堆排序:

    利用这种数据结构而设计的一种排序算法,堆排序是一种选择排序它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

    (不知道堆的,自行百度)

    堆排序的基本思路:

      a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;

      b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;

      c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

    至于实现的话,C++有stl(优先队列啊),干嘛非得手写堆。

     

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<string>
     6 #include<queue>
     7 #include<cmath>
     8 #define ll long long
     9 #define DB double
    10 #define inf 214748360000
    11 #define mod 1000000007
    12 using namespace std;
    13 int n;
    14 struct node{
    15     int x;
    16     friend bool operator <(node a,node b)
    17     {
    18         return a.x>b.x;
    19     }
    20 };
    21 priority_queue<node>q;
    22 int main()
    23 {
    24     scanf("%d",&n);
    25     for(int i=1;i<=n;++i)
    26     {
    27         int x;scanf("%d",&x);
    28         q.push((node){x});
    29     }
    30     while(!q.empty())
    31     {
    32        cout<<q.top().x<<" ";
    33        q.pop();    
    34     }
    35     return 0;
    36 }
    View Code

    放得功名富贵之心下,便可脱凡;放的仁义道德之心下,才可入圣。

  • 相关阅读:
    placement new小结
    template template parameter 模板模板参数
    windows下创建和删除软链接
    gcc下载地址
    map的erase函数小结
    typedef函数指针
    宏定义条件编译中使用多条件
    关于c++模板特例化测试
    tolua使用
    c++多态
  • 原文地址:https://www.cnblogs.com/adelalove/p/8484524.html
Copyright © 2011-2022 走看看