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

    堆排序的原理不用解释了,实现了一个简易的堆排序算法,放到这里,以后可以直接拿来用。

    首先是调整堆的例程:

          void heapAdjust(int arr[], int s, int m):假设堆arr中除s以外的其余元素都满足堆定义,此函数调整s关键字,使[s:m]成为一个大根堆

     1 void heapAdjust(int arr[], int s, int m)
     2 {
     3     int j;
     4     int rc = arr[s];
     5     for(j = 2*s; j < m; j = j*2)
     6     {
     7         if(j<m && arr[j]<arr[j+1])
     8             j++;
     9         if(rc >= arr[j])
    10             break;
    11         arr[s] = arr[j];
    12         s = j;
    13     }
    14     arr[s] = rc;
    15 }

    然后是我们的堆排序

        void heapsort(int arr[], int size):

          1)将[0:size-1]范围内的元素建成一个大根堆

          2)以此将根元素与最后一个元素调换并重新调整堆及堆大小。

     1 void heapsort(int arr[], int size)
     2 {
     3     int i, tmp;
     4 
     5     //建一个大根堆
     6     for(i = size/2; i >= 0; i--)
     7         heapAdjust(arr, i, size);
     8 
     9     for(i = size-1; i >= 0; i--)
    10     {
    11         tmp = arr[0];
    12         arr[0] = arr[i];
    13         arr[i] = tmp;
    14 
    15         heapAdjust(arr, 0, i-1);
    16     }
    17 }

     

    Over~

  • 相关阅读:
    155. 最小栈
    160. 相交链表
    PAT 1057 Stack
    PAT 1026 Table Tennis
    PAT 1017 Queueing at Bank
    PAT 1014 Waiting in Line
    PAT 1029 Median
    PAT 1016 Phone Bills
    PAT 1010 Radix
    PAT 1122 Hamiltonian Cycle
  • 原文地址:https://www.cnblogs.com/cobbliu/p/2513402.html
Copyright © 2011-2022 走看看