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

    #include<iostream>
    using namespace std;
    void AdjusHeap(int arr[], int i, int n) {
        int s = i;
        int x = i*2;
        int y = x+1;
        if (x < n && arr[s] < arr[x]) 
          s = x;
      if (y < n && arr[s] < arr[y])
        s = y;
      if (s != i) {
          swap(arr[i], arr[s]);
          AdjusHeap(arr, s, n);
        }
    }
    void BuildHeap(int arr[], int n) {
        for (int i = n/2-1; i >=0; i--)
          AdjusHeap(arr, i, n);
    }
    void HeapSort(int arr[], int n) {
        BuildHeap(arr, n);
        while (n > 1) {
            swap(arr[0], arr[n-1]);
            n--;
            AdjusHeap(arr, 0, n);
        }
    }
    int main() {
      int arr[10];
      for (int i=0; i<5; i++)
        cin>>arr[i];
      HeapSort(arr, 5);
      for (int i=0; i<5; i++)
        cout<<arr[i]<<" ";
    }
    #include<iostream>
    using namespace std;
    void AdjusHeap(int arr[], int i, int end){//与父节点比较 
      int x=i*2+1;//
      int y=x+1;//
      int s=i;//
      while (x<end||y<end){
        if (x<end&&arr[s]<arr[x])
          s=x;
        if (y<end&&arr[s]<arr[y])
          s=y;
        if (s!=i){
          swap(arr[i], arr[s]);
          i=s;
          x=i*2+1;
          y=x+1;
        }
        else
          break;
      }
    } 
    void BuildHeap(int arr[], int end){//建立树 
      for (int i=end/2-1; i>=0; i--){
        AdjusHeap(arr, i, end);
      }
    }
    void HeapSort(int arr[], int end){//根节点与最后一个交换 
      BuildHeap(arr, end);
      while(end>1) {
        swap(arr[0], arr[end-1]);
        end--;
        AdjusHeap(arr, 0, end);
      }    
    }
    int main() {
      int arr[10];
      for (int i=0; i<5; i++)
        cin>>arr[i];
      HeapSort(arr, 5);
      for (int i=0; i<5; i++)
        cout<<arr[i]<<" ";
    }

     参考:http://www.cnblogs.com/Anker/archive/2013/01/23/2873422.html

  • 相关阅读:
    20100920 [随笔] -Roy
    20100826 [随笔] Roy
    20100820随笔Roy
    20100825 [随笔] -Roy
    博客园开博随笔
    Synchronized vs SyncRoot
    Exception vs ApplicationException
    Monitor用法
    捕获ASP.NET程序发生的异常
    理解ParseChildren用法
  • 原文地址:https://www.cnblogs.com/a863886199/p/6628426.html
Copyright © 2011-2022 走看看