大話資料結構之堆排序

2021-07-07 09:06:06 字數 701 閱讀 3954

堆排序思想:將待排序的序列構造成乙個大頂堆。整個序列的最大值就是堆頂的根節點。將它移走(就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值),然後將剩餘的n-1個序列重新構造成乙個堆,這樣就會得到n個元素中的次大值。如此反覆執行,便能得到乙個有序序列。

堆排序的時間複雜度:o(nlogn)

/*

堆:完全二叉樹,且

每個結點的值》=其左右子結點的值:大頂堆

每個結點的值<=其左右子結點的值:小頂堆

*/typedef struct

sqlist;

/* 交換l中陣列r的下標為i和j的值 */

void swap(sqlist *l,int i,int j)

/* 已知l->r[s..m]中記錄的關鍵字除l->r[s]之外均滿足堆的定義, */

/* 本函式調整l->r[s]的關鍵字,使l->r[s..m]成為乙個大頂堆 */

void heapadjust(sqlist *l,int s,int m)

l->r[s]=temp; /* 插入 */

}/*對順序表進行堆排序*/

void heapsort(sqlist *l)

/*逐步將每個最大值的根節點與末尾元素交換,再次調整其為大頂堆*/

for (int i = l->length; i > 1; i--)

}

資料結構之堆排序

在資料結構中,堆排序是非常重要的乙個知識點,尤其像在期末考試 考研等計算機考試中經常會考察堆排序,並要求畫出示意圖.下面主要通過一道考研題目講述堆排序的知識,希望對大家有所幫助.文章內容參考嚴蔚敏的 資料結構 王道論壇的 資料結構 和自己的一些理解 參看動態圖 堆排序是一種樹形選擇排序方法,它的特點...

資料結構之堆排序

堆排序就是利用堆 本文利用大頂堆 進行排序的方法。它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。它的基本思想是,將待排序的序列構造成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 就是將它與堆陣列的末尾元素交換,此時末尾元素就是最大值...

資料結構之堆排序

堆具有完全二叉樹的性質 每個結點大於等於左右孩子的堆稱為大頂堆,或每個結點小於或等於左右孩子的堆稱為小頂堆。堆排序 將待排序的序列構建成乙個大頂堆,此時,最大值在整個堆的根結點。將它移走 其實就是將它與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的n 1個序列重新造成乙個,這樣會得到n個...