堆排序

       我想說的不是內存中的堆空間,這裏的堆只是一種組織方式,採用的是用完全二叉樹的形式來表示一維數組,就是說如果是一個大頂堆的話,根部的數是最大的,從根部開始,一層一層對應數組,例如數組int a[6]={6,5,4,3,2,1},a[0]是根部,a[1] 是左子節點,a[2]是右子節點,。。。。。。

       如果要對一個一維數組進行堆排序的話,首先要把這個一維數組初始化爲一個大頂堆,或者是一個小頂堆,用的時間0(n),看c++算法分析,然後對於一個個數爲n的堆,數的高度爲log2 n+1,則每次刪除根部後,平均移動的時間0(log2 n),所以堆排序的時間O(n*log2 n),小於O(n*n)。

        具體分析:

        刪除:刪除根部後,然後比較它的兩個子節點,找到最大後放到根部,然後依次下去比較直到結束。

        初始化堆:從n/2到1,作爲根部,進行排序。

        具體,看c++算法分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章