堆排序算法

    xiaoxiao2021-03-25  151

    void BuildMaxHeap(int a[], int len) {     for(int i = len/2; i > 0 ; i--)     {         AdjustDown(a, i, len);     } } // 向下调整 void AdjustDown(int a[], int k, int len) {     a[0] = a[k];     for(int i = k *2; i <= len; i*=2)     {         if(i < len && a[i] < a[i+1])             i++;   //取key较大的子节点的下标         if(a[0] >= a[i])  break;         else         {             a[0] = a[i];             k = i;         }     }     a[k] = a[0]; } // 向上调整 void AdjustUp(int a[], int k, int len) {     a[0] = a[k];     int i = k/2;     while(i > 0 && a[i] < a[0])     {         a[k] = a[i];             k = i;         i = k/2;     }     a[k] = a[0]; } // 堆排序 void HeapSort(int a[], int len) {     BuildMaxHeap(a,len);     for(int i = len; i>0; i--)     {               swap(a[i], a[1]);         AdjustDown(a,1, i-1);     } }

     

    转载请注明原文地址: https://ju.6miu.com/read-2387.html

    最新回复(0)