堆排序

// C++ program for implementation of Heap Sort
#include <iostream>
  
using namespace std;
  
// To heapify a subtree rooted with node i which is
// an index in arr[]. n is size of heap
void heapify( int arr[], int n, int i)
{
     int largest = i; // Initialize largest as root
     int l = 2*i + 1; // left = 2*i + 1
     int r = 2*i + 2; // right = 2*i + 2
  
     // If left child is larger than root
     if (l < n && arr[l] > arr[largest])
         largest = l;
  
     // If right child is larger than largest so far
     if (r < n && arr[r] > arr[largest])
         largest = r;
  
     // If largest is not root
     if (largest != i)
     {
         swap(arr[i], arr[largest]);
  
         // Recursively heapify the affected sub-tree
         heapify(arr, n, largest);
     }
}
  
// main function to do heap sort
void heapSort( int arr[], int n)
{
     // Build heap (rearrange array)
     for ( int i = n / 2 - 1; i >= 0; i--)
         heapify(arr, n, i);
  
     // One by one extract an element from heap
     for ( int i=n-1; i>=0; i--) //刪除操做的時候,移出去最後一個數據,而後總個數減小了一個
     {
         // Move current root to end
         swap(arr[0], arr[i]);//交換最後一個和第一個根位置的元素
  
         // call max heapify on the reduced heap
         heapify(arr, i, 0);//開始從新堆排序,
     }
}
  
/* A utility function to print array of size n */
void printArray( int arr[], int n)
{
     for ( int i=0; i<n; ++i)
         cout << arr[i] << " " ;
     cout << "\n" ;
}
  
// Driver program
int main()
{
     int arr[] = {12, 11, 13, 5, 6, 7};
     int n = sizeof (arr)/ sizeof (arr[0]);
  
     heapSort(arr, n);
  
     cout << "Sorted array is \n" ;
     printArray(arr, n);
}
 
https://www.geeksforgeeks.org/heap-sort/     代碼
https://www.bilibili.com/video/av12667435/   視頻講解
https://www.bilibili.com/video/av18980178/    視頻講解
 https://blog.csdn.net/u010452388/article/details/81283998  代碼步驟詳解
 
https://www.cnblogs.com/sjrb/p/10371613.html
https://www.cnblogs.com/chengxiao/p/6129630.html
相關文章
相關標籤/搜索