zoukankan      html  css  js  c++  java
  • 【模板】快速排序

    P1177 【模板】快速排序

    【 堆排序 】

          时间复杂度:O(nlogn)      PS:OI界的log都是以2为底数

          空间复杂度:O(n)

          [ 代码 ]:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    long long n,x,heap_size;
    int heap[100001];
    
    void put(int d)
    {
        int now,next;
        heap[++heap_size]=d;
        now=heap_size;
        while(now>1)
        {
            next=now>>1;
            if(heap[now]>=heap[next]) break; //小根堆
    // if(heap[now]<=heap[next]) break; //大根堆
    else swap(heap[now],heap[next]); now=next; } } int get() { int now,next,res; res=heap[1]; heap[1]=heap[heap_size--]; now=1; while(now*2<=heap_size) { next=now*2; if(next<heap_size&&heap[next+1]<heap[next]) next++; //小根堆
    // if(next<heap_size&&heap[next+1]>heap[next]) next++; //大根堆
    if(heap[now]>heap[next]) //小根堆
    // if(heap[now]<heap[next]) //大根堆 swap(heap[now],heap[next]); now
    =next; } return res; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); put(x); } for(int i=1;i<=n;i++) cout<<get()<<" "; return 0; }

    【简练版本】

     使用C++标准模板库STL(需要头文件 algorithm)

    #include<bits/stdc++.h>
    #include<algorithm>
    
    using namespace std;
    
    long long n,x,heap_size;
    int heap[100001];
    
    void put(int d)
    {
        
        heap[++heap_size]=d;
    //  push_heap(heap+1,heap+heap_size+1);                //大根堆 
        push_heap(heap+1,heap+heap_size+1,greater<int>()); //小根堆 
    }
    
    int get()
    {
    //    pop_heap(heap+1,heap+heap_size+1);              //大根堆 
        pop_heap(heap+1,heap+heap_size+1,greater<int>()); //小根堆 
        return heap[heap_size--];
    }
     【 快排 】

          时间复杂度:O(nlogn)      PS:OI界的log都是以2为底数

          空间复杂度:O(nlogn)

          [ 代码 ]:(从小到大)

    #include<bits/stdc++.h>
    
    using namespace std;
    
    long long n;
    int a[100001];
    
    int main()
    {
         scanf("%d",&n);
         for(int i=1;i<=n;i++)
             scanf("%d",&a[i]);
         
         sort(a+1,a+n+1);
         
         for(int i=1;i<=n;i++)
            cout<<a[i]<<" ";
         
         return 0;    
    }
  • 相关阅读:
    SQL server 语言基础
    存储过程练习
    触发器
    存储过程
    时间日期函数,类型转化,子查询,分页查询
    数学函数,字符串函数
    用 CREATE TABLE 命令建立表的结构
    结构体,枚举类型
    函数练习
    集合以及特殊集合
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10776687.html
Copyright © 2011-2022 走看看