堆排序詳講

2021-07-31 13:18:04 字數 823 閱讀 7849

堆排序的時間,主要由建立初始堆和反覆重建堆這兩部分的時間開銷構成,它們均是通過呼叫heapify實現的

o(n*logn)。

排序(heapsort)是指利用堆積樹(堆)這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即a[parent[i]] >= a[i]。在陣列的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。

#include int h[101];//用來存放堆的陣列

int n;//永凱儲存堆中元素的個數

void swap(int x,int y)//用來交換堆中兩個元素的值

//向下調整函式

void siftdown(int i)//傳入乙個需要向下調整的節點編號 i,這裡傳入的是1,即從堆的頂

else

if(i*2+1<=n)//如果它有右兒子,再對右兒子進行討論

}//如果發現最小的結點編號不是自己,說明子結點中有比父節點更小的

if(t!=i)

else

}}void creat()

}void heapsort()

}int main()

n = num;

creat();//建堆

heapsort();

for(i=1;i<=num;i++)

printf("\n");

return 0;

}

簡單易懂的講堆排序

堆排序利用二叉堆來進行排序,而二叉堆用完全二叉樹代替 因為易於儲存和索引 乙個陣列就可以儲存完全二叉樹。但堆並不一定是完全二叉樹,堆還有更複雜的,就不一一枚舉 怎麼用陣列儲存呢?對於每乙個節點i,其父節點為i 2,其左右子節點分別為i 2,i 2 1 如圖 怎麼進行排序呢,我們分為兩個大步驟 1,構...

KMP演算法詳講

一 簡單匹配演算法 先來看乙個簡單匹配演算法的函式 int index bf char s char t int pos else j nextval j 子串移動到第nextval j 個字元和主串相應字元比較 下面是我寫的kmp模式匹配程式,各位可以測試一下。include include in...

學弟講演算法 排序 冒泡 插入 快速 堆排序合集

氣泡排序,len為陣列長度 template void bubblesort vector data 如果此輪沒有發生交換,則說明已完成排序 if exchange false template void insertsort vector data 此處就是為插入temp留出的空 退出迴圈時j會多...