堆排序演算法

2021-09-30 08:54:55 字數 820 閱讀 5442

1.概述

2023年計算機先驅將獲得者、史丹福大學電腦科學系教授robert w.floyd和j. williams在2023年共同發明了著名的heap sort演算法。

堆排血實質上就是將要進行排序的序列arr[1..n]看做是一棵完全二叉樹的儲存結構,堆則是滿足如下性質的完全二叉樹:樹中任一非

葉結點的關鍵字均不大於(或不小於)其左右孩子(若存在)結點的關鍵字。(如果按照陣列中線性儲存該樹,可得到乙個既不是單調

遞增也不是單調遞減的序列)

(1)堆排序與直接選擇排序的區別

直接排序的缺點:直接選擇排序過程中,為從arr[1..n]中選擇出關鍵字最大的記錄,必須進行n-1次比較,然後在arr[2...n]中選出關

鍵字最大的記錄,又需要做n-2次比較。事實上,後面的n-2次比較中,有許多比較可能在前面n-1比較中已經做成的,但是由於前一趟

比較過程中未保留這些比較結果,所以後一趟排序執行了這些比較操作。

堆排序:堆排序可以通過樹型結構儲存部分比較結果,從而可以大大減少比較的次數。

(2)大堆排序的基本思想

首先將arr[1..n]建成乙個大根堆,此堆為初始的無序區。再將關鍵字最大的記錄arr[i]和無序區的最後乙個記錄arr[n]交換,由此得到

了乙個新的無序區arr[1..n-i]和有序區arr[...n],且滿足arr[1..n-i]2. 編輯環境

netbeans c++ 6.5

window xp

3.問題概述及演算法實現

問題:從十億個數中取出前十個最大的數。(只想到用該演算法去實現了,如果有更好的實現方法,可以share)

程式:

呼叫示例

排序演算法 堆排序

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

排序演算法 堆排序

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

排序演算法 堆排序

由於不經常使用,之前學習看過的演算法都給忘了。現在把他們寫下來,記錄下來,以方便以後查閱。本篇文章的 即為堆排序的 主函式中是對輸入檔案中的序列進行排序,並將結果輸出到乙個檔案中。這是一種形式類似於google codejam的測試方法。include include using namespace...