堆排序 資料結構

2022-03-01 07:08:33 字數 899 閱讀 6513

堆排序前不久,我們資料結構剛剛學習到,堆排序。個人覺得堆排序比較好,因為比較穩定的時間複雜度。n(logn) 時間複雜度。

如果想要學會堆排序,需要知道,二叉樹。堆就和二叉樹長的一模一樣。

下面說說堆排序:

堆排序的思想就是用到堆的特點, 大頂堆,小頂堆,簡單說,

大頂堆就是:這一棵完全二叉樹的任意乙個節點都滿足該節點的值大於等於

他的左右孩子節點,

小頂堆: 一棵完全二叉樹的任意乙個節點都滿足該節點的值小於等於

他的左右孩子節點,

因為這棵樹的根節點是這棵樹(堆) 中,如果是大頂堆就是max,小頂堆就是min,

比如我已大頂堆為例講一下,大頂堆的個人根節點是最大值,只需要將根節點與最後乙個數換一下,然後,把最後乙個數除開不看,剩下的n-1個數字也是一棵完全二叉樹,再將這棵樹維護成大頂堆,不斷重複到最後,就排好序了。

這樣便得到乙個蟲小到大的陣列。over

/******************

heap sort

******************/

#include#include#include#includeusing namespace std;

void bigheap(int *a,int i,int len)//維護堆

if(rtemp)

}if(flag)

}void buildheap(int *a,int len)// 構建初始堆

}void heapsort(int *a,int len)

}int main()

}//for(int i=0;iif(flag) printf("erorr\n");

else printf("accepted\n");

}return 0;

}

堆排序,資料結構c c

堆排序聽著和圖有關係,但是其實只是引用樹的知識,也可以理解為把陣列理解為乙個滿二叉樹 說法有問題,應該是左邊滿的二叉樹 這樣就可以有這樣的乙個定義就是n節點的子節點是2n 1和2n 2兩個節點。以公升序為例 直接貼出源 include using namespace std void change ...

資料結構 堆排序 堆排序 Heap Sort

堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...

資料結構 堆排序

include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...