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 三 堆排序...