資料結構:堆排序
阿新 • • 發佈:2021-01-03
簡單介紹
堆排序就是利用堆這一資料結構來排序,堆使一顆完全二叉樹,每個結點都不大於或者不小於他的兒子。關於排序的話,我們每次取出堆頂元素和堆尾的交換,然後由剩下的元素重新構建堆,最後我們將得到一個有序的序列。
Code
#include<bits/stdc++.h> using namespace std; void heap_adjust (int r[],int low,int high) { int i=low; int j=2*low+1; int temp=r[low]; while (j<high) { if (j<high&&r[j]<r[j+1]) j++; //每輪只需要對兩個兒子進行操作,所以取大的操作比較一次就可以了 if (temp<r[j]) { r[i]=r[j]; i=j; j=2*i+1; //調整位置繼續構建堆 } else break; } r[i]=temp; //temp賦值給最後一個 return ; } void heap_sort (int r[],int n) { int i; int temp; for (int i=n/2-1;i>=0;i--) heap_adjust (r,i,n-1); //最底層非葉子結點開始調整 for (int i=n-1;i>=1;i--) { swap (r[0],r[i]); heap_adjust (r,0,i-1); //此時下面均為有序,所以要從堆頂開始調整 } return ; } int main () { int R[8]={49,38,65,97,76,13,27,49}; heap_sort (R,8); for (int i=0;i<8;i++) printf ("%d ",R[i]); printf ("\n"); return 0; }