zoukankan      html  css  js  c++  java
  • 最大堆:排序以及最小k个数

    堆排序:不稳定,平均情况和最坏情况的时间复杂度O(nlogn),空间复杂度O(1)

    void swap(int *a, int *b)
    {
        int temp;
        temp=*a;
        *a=*b;
        *b=temp;
    }
    
    void heapDown(int *a, int n)
    {
        if(n<=0) return;
    
        int max;
        int c=0;
    
        while(2*c<n)
        {
            if(2*c+1<n)
            {
                if(a[2*c+1]<a[2*c+2]) max=2*c+2;
                else max=2*c+1;
            }
            else max=2*c+1;
    
            if(a[c]<a[max]) swap(&a[c],&a[max]);
            else break;
    
            c=max;
        }
    }
    
    void heapUp(int *a, int n)
    {
        if(n<=0) return;
    
        while(n)
        {
            if(a[n/2]<a[n]) swap(&a[n/2],&a[n]);
            else break;
    
            n=n/2;
        }
    }
    
    void heapSort(int *a, int n)
    {
        if(n<=0) return;
    
        int i;
    
        for(i=1;i<n;i++) heapUp(a,i);
    
        for(i=n-1;i>=1;i--)
        {
            swap(&a[i],&a[0]);
            heapDown(a,i-1);
        }
    }
    
    void minK(int *a, int n, int k)
    {
        if(n<=0) return;
        if(k<=0) return;
    
        int i;
    
        for(i=1;i<k;i++) heapUp(a,i);
    
        for(i=k;i<n;i++)
        {
            if(a[i]<a[0])
            {
                swap(&a[i],&a[0]);
                heapDown(a,k-1);
            }
        }
    }
  • 相关阅读:
    基本类型
    匿名对象和匿名方法
    定时任务@SChedule详解
    docker的配置和安装
    数据库的学习
    docker的学习
    nginx的学习
    yyyy-MM-dd HH:mm:ss.SS的大小写的含义
    单例模式的学习
    layer的学习
  • 原文地址:https://www.cnblogs.com/mr-redrum/p/3494325.html
Copyright © 2011-2022 走看看