堆排序的實現 c語言
/*heap sort*/
/*交換陣列中的兩個元素*/
void swap(int arr, int idx1, int idx2)
/*堆化,根據定義調整為大頂堆*/
void max_heapify(int arr, int index, int num)
/*如果有右節點,且右節點值更大,則更新最大值索引*/
if((right < num) && (arr[right] > arr[largest_idx]))
/*如果最大值不是當前(index)非葉節點的值,則將當前節點和最大的子節點值交換*/
if(largest_idx != index)
return;
}/*建立大頂堆:把待排序序列,變成乙個大頂堆結構的陣列*/
void build_max_heap(int arr, int len)
return;
}/*堆排序函式*/
void heap_sort(int arr, int size)
/*根據堆定義建立大頂堆:其實是把待排列的序列變成乙個大頂堆結構的陣列*/
build_max_heap(arr, size);
/*交換堆頂和末尾節點,然後重置大頂堆*/
for(i = size-1; i > 0; i--)
return;
}
單鏈表 SList 實現 有詳細注釋
三個檔案 pragma once include include typedef int slistdatatype typedef struct slistnode slistnode 尾部插入 void slistpushback slistnode pphead,slistdatatype x...
順序棧的表示和實現(有詳細注釋)
include define overflow 0 定義 溢位 為0 define error 0 define ok 1 define maxsize 100 順序棧儲存空間的初始分配量 typedef int selemtype selemtype為資料型別 typedef int status...
大頂堆的建立
加入由乙個無序陣列 9,4,8,3,5,1,2,6,7,0 思路 先將無序陣列構建成乙個完全二叉樹 正 文 分 割 線 什麼是二叉樹?二叉樹模型 圈裡的數字代表著標號,而不是實際存放的資料 什麼是二叉樹 二叉數是只擁有兩顆子樹的樹,兩顆子樹分別被稱為 左子樹 和 右子樹 什麼是堆?堆是乙個特殊的完全...