資料結構基礎7 3 堆排序

2021-07-08 11:11:55 字數 1217 閱讀 7372

堆排序是利用堆的性質進行的一種選擇排序。

1. 將初始待排序關鍵字序列(r1,r2....rn)構建成大頂堆,此堆為初始的無序區。

2. 將堆頂元素r[1]與最後乙個元素r[n]交換,此時得到新的無序區(r1,r2,......rn-1)和新的有序區(rn),且滿足r[1,2...n-1]<=r[n]。

3 .由於交換後新的堆頂r[1]可能違反堆的性質,因此需要對當前無序區(r1,r2,......rn-1)調整為新堆,然後再次將r[1]與無序區最後乙個元素交換,得到新的無序(r1,r2....rn-

2)和新的有序區(rn-1,rn)。不斷重複此過程直到有序區的元素個數為n-1,則整個排序過程完成。

#include #include #include using namespace std;

#define error 1

#define ok 0;

typedef int status;

typedef struct heap *maxheap;

/* 以n為結點不是堆,左子樹是堆,右子樹是堆,調整為乙個堆,方法是向下過濾 */

status percdown(maxheap mh, int n)

else

break;

}mh->parray[parent] = temp;

return ok;

}/* 建造最大堆 */

status buildheap(maxheap mh)

/* 交換陣列元素 */

void swap(int *pa, int *pb)

/* 堆排序 */

status shell_sort(int a, int n)

return ok;

}int main()

;

for(i = 0; i < sizeof(a) / sizeof(a[0]); i++)

printf("%d ", a[i]);

printf("\n");

shell_sort(a, sizeof(a) / sizeof(a[0]));

for(i = 0; i < sizeof(a) / sizeof(a[0]); i++)

printf("%d ", a[i]);

printf("\n");

system("pause");

return 0;

}

資料結構基礎整理 排序 03 堆排序

堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆是具有以下性質的一棵樹 s是要需要調整堆結構的順序表的下標元素 調整完後使之成為大頂堆,m是堆的大小 void he...

資料結構基礎 19 堆與堆排序

首先讓我們回顧一下完全二叉樹的兩個性質 性質1 具有n個結點的完全二叉樹的深度為 logn 向下取整 1。性質2 若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意乙個編號為 i 的結點 1 若 i 1,則該結點是二叉樹的根,無雙親,否則,編號為 i 2 ...

資料結構基礎 19 堆與堆排序

首先讓我們回顧一下完全二叉樹的兩個性質 性質1 具有n個結點的完全二叉樹的深度為 logn 向下取整 1。性質2 若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意乙個編號為 i 的結點 1 若 i 1,則該結點是二叉樹的根,無雙親,否則,編號為 i 2 ...