堆排序演算法淺解

2021-09-23 15:31:38 字數 945 閱讀 5594

1.堆排序即利用堆的思想對堆進行重複的調整,把堆頂的元素放到最後乙個節點處,然後調整堆,依次迴圈直到排序完成

#include

using namespace std;

void

swap

(int

* arr,

int a,

int b)

void

adjust

(int

* arr,

int parent,

int len)

//如果孩子比父親大

if(arr[child]

> arr[parent]

)else}}

void

print

(int arr,

int len)

cout << endl;

}void

heapsort

(int

* arr,

int len)

//成為大堆以後需要進行排序,把堆頂元素和最後乙個結點進行交換,然後重複調整堆的位置

//for

(int i = len -

1; i >0;

--i)

return;}

intmain()

;int len =

sizeof

(array)

/sizeof

(array[0]

);print

(array, len)

;heapsort

(array, len)

;print

(array, len)

; cout<<

"hello....."

("pause");

return0;

}

淺解前端必須掌握的演算法(五) 堆排序(上)

另外,掌握了一些基本的演算法實現,對於我們日常開發來說,也是如虎添翼,能讓我們的 js 業務邏輯更趨高效和流暢。今天這個演算法稍微比較複雜,牽扯到的概念也比較多,需要先了解基礎知識。我給每篇文章的定位是 10 分鐘內應該要掌握下來,所以我就擅作主張地將堆排序演算法講解分割為上 下兩篇文章了,希望能讓...

排序演算法 堆排序

1 什麼是堆 首先它是一顆完全二叉樹,並且父結點的值大於子節點的值 最大堆 或父結點的值小於子結點的值 最小堆 小根堆 根結點 亦稱為堆頂 的關鍵字是堆裡所有結點關鍵字中最小者的堆稱為小根堆,又稱最小堆。大根堆 根結點 亦稱為堆頂 的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆。2 堆...

排序演算法 堆排序

花了一晚上時間研究堆排序,這個排序困擾了哥很久,終於搞清楚了。一 堆的定義 1.父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值 2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 二 已知結點 i 則它的子結點 為2 i 1 與 2 i 2 父節點為 i 1 2 三 堆排序...