C 堆排序演算法

2021-07-04 11:14:25 字數 809 閱讀 4174

//基本思路:

//1.把乙個陣列按下錶構造成乙個完全二叉樹

//2.找到陣列的最後乙個元素(最後乙個葉子結點),判斷它在左子樹上還是右子樹上

//3.如果在左子樹上,直接拿該結點與它的父結點比較,如果比父結點大,與父結點交換位置

//4.如果在右子樹上,左右子樹先比較大小,把大的放在右子樹上,再將右子樹與父結點比較,把大的放在父節點上

//5.查詢到倒數第二個父結點,重複它的子樹的構建堆過程,直到查詢到根結點為止。

//6.把此時的根結點放在陣列的最後一位上(此時根結點是該堆的最大值),重複上訴過程,直到排好序為止。

#include

using namespace std;

#define n 10

void heapsort(int a, int num)

if (num == 1)

return;

while (num != 1)

}else

if (a[num - 1] >= a[num / 2 - 1])

}num = (num / 2 - 1) * 2 + 1;

}i++;

temp = a[0];

a[0] = a[num0 - i];

a[num0 - i] = temp;

num = num0 - i;}}

int main()

;int i;

heapsort(a, n);

for (i = 0; i < n; i++)

cout << endl;

return 0;

}

排序演算法 堆排序 C

堆排序的基本過程 1.找到最大的元素,放到最後面去 2.找到第二大的元素,放在倒數第二個位置 依次類推,直到所有元素完成排序。其中每一步中,找最大元素的方法是借助堆。堆可以看成是乙個完全二叉樹,且每個節點的值都大於它的子節點的值。對於陣列來說,就是任意第 i 個元素大於第 2i 1 和第 2i 2 ...

排序演算法 堆排序(c

堆排序思想 首先將待排序的記錄序列構造成乙個堆,然後將堆頂元素移走,此時,選出了堆中所有記錄的最大者即堆頂。並將剩餘的記錄再調整為堆,這樣又找出了次大的元素,以此類推,直到堆中只有乙個記錄為止。a.將無序序列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆 b.將堆頂元素與末尾元素交換,將最大元素...

排序演算法 堆排序(C )

堆排序分為大根堆和小根堆。堆排思想 採用樹的概念來組織資料結構,在這裡我是根據小根堆對資料進行排序 首先我們insertheap一組資料,在插入的過程中採用向上調整 shiftup 每次將插入的最小值放在堆頂 heap 0 然後我們removeheap建立好的堆,將heap 0 節點剔除作為返回值,...