資料結構 M 堆排序

2021-09-24 05:24:50 字數 1115 閱讀 7303

​現在的每乙份努力

都在為你的出行積累欣喜~​

>>堆排序:演算法介紹:

堆排序只需要記錄大小的輔助空間,每個待排序額記錄僅占有乙個儲存空間。

因此,我們可以將這個一維陣列看作是乙個完全二叉樹,而這個完全二叉樹滿足任意孩子節點的值要小於(大於)其父節點。也就是說根結點的數值是所有資料當中最小(大)的。

演算法分析:

在堆排序中,重點是演算法就是堆的建立,因為堆的特性,堆得堆頂一定是這些資料的最大或者是最小值;

在陣列當中建立了乙個堆,因此,我們就可以獲取堆頂元素,而這個堆頂元素就是陣列中最小值,將這個最小值輸出來之後,重建這個堆,就可以獲取這組資料中的第二個最小值,以此類推,就可以從小到大獲取了這個陣列中所有的數值,而按照獲取的順序進行排序之後,就是乙個有序的序列。

堆排序過程的**實現需要解決兩個問題:

如何將得到的無序序列轉化為乙個堆?

在輸出堆頂元素之後(完全二叉樹的樹根結點),如何調整剩餘元素構建乙個新的堆?

下面的heap.c**實現:

#include "heap.h"

#include #include #include void swap(int* data, int* data1)

void heapadjust(int* array, int size,int parents)

if ((array[child]> array[parents]))

else

}}void heapsort(int* array, int size)

//排序

int end = size - 1;

while (end != 0 ) }

void test()

; heapsort(array, sizeof(array) / sizeof(array[0]));

}

test.c的**:

#include "heap.h"

#include #include int main()

資料結構 堆排序 堆排序 Heap Sort

堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...

資料結構 堆排序

include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...

資料結構 堆排序

1 堆排序的時間複雜度與歸併排序相同,o nlogn 堆排序的優勢在與他只需要固定數量的額外空間,堆排序要比空間複雜性為o n 的歸併排序稍微慢一些,但是比空間複雜性為o 1 的歸併排序要快。2 對序列 26,5,77,1,61,11,59,15,48,19 進行堆排序 過程 調整最大堆 二叉堆 v...