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

    #include<iostream>
    #include<algorithm>
    #include<numeric>
    using namespace std;
    
     
    //void MinHeapFixup(int a[], int i)
    //{
    // int j ,temp;
    // temp = a[i];
    // j = (i-1)/2;
    // while(j >= 0 && i != 0)
    // {
    //  if(a[j] <= temp) break;
    //  a[i] = a[j];
    //  i = j;
    //  j = (i - 1)/2;
    // }
    // a[i] = temp;
    //}
    
    void MinHeapFixup(int a[],int i)
    {
     for(int j = (i -1)/2;(j>=0 && i != 0) && a[i] > a[j];i=j,j=(i-1)/2)   swap(a[i],a[j]);
    }
    
    void MinHeapAddNumber(int a[], int n, int nNum)
    {
     a[n] = nNum;
     MinHeapFixup(a,n);
    }
    
    void MinHeapFixdown(int a[],int i,int n)
    {
     int j,temp;
     temp = a[i];
     j = 2*i + 1;
     while(j<n)
     {
      if(j+1 < n && a[j + 1] < a[j]) j++;
    
      if(a[j] >= temp) break;
    
      a[i] = a[j];
      i = j;
      j = 2*i + 1;
     }
      a[i] = temp;
    }
    
    void MinHeapDeleteNumber(int a[],int n)
    {
     swap(a[0],a[n-1]);
     MinHeapFixdown(a,0,n - 1);
    }
    
    void MakeMinHeap(int a[], int n)
    {
     for(int i = n/2 - 1;i>= 0;i--)
         MinHeapFixdown(a,i,n);
    }
    
    void Minheapsort(int a[],int n)
    {
     for(int i = n-1;i>=1;i--)
     {
       swap(a[i],a[0]);
       MinHeapFixdown(a,0,i);
     }
    }
    int main()
    {
        int a[] = {1,9,5,3,7,2,6,3,4};
        Minheapsort(a,8);
        for(int i = 0;i< 8;i++)
            cout<<a[i]<<" ";
    }

    奶奶个腿,把堆排序,快排序和归并排序他妈的背下来

    不过的确,三种算法对应着三种思想

    一个分治法,一份分治+双指针,最后一个找优先~

    Magic

    berkeleysong
  • 相关阅读:
    MQ
    redis
    MongoDB
    进程相关命令
    catalina.sh
    tomcat-jvm
    中间件简介
    websphere
    mysql
    shell变量与字符串操作
  • 原文地址:https://www.cnblogs.com/berkeleysong/p/3747142.html
Copyright © 2011-2022 走看看