演算法 手撕堆排序

2021-09-24 18:46:46 字數 1110 閱讀 5125

時間複雜度:o(n

logn

)o(nlogn)

o(nlog

n),但是實際軟開中,快排效能更好。

堆性質:

堆排序(從小到大,利用最大堆和陣列)

從後往前堆化陣列元素,此時最大元素在首位置

交換元素堆化

**

#include

#include

using

namespace std;

void

heapsort

(int

* array,

int n)

;void

buildheap_

(int

* array,

int n)

;//建立最大堆

void

heapify_

(int

* array,

int n,

int idx)

;//調整idx節點滿足堆性質

void

swap_

(int

* array,

int aidx,

int bidx)

;void

heapsort

(int

* array,

int n)

}void

buildheap_

(int

* array,

int n)

void

heapify_

(int

* array,

int n,

int idx)

}void

swap_

(int

* array,

int a,

int b)

intmain()

;heapsort

(array,9)

;for

(auto i : array)

cout << i <<

" ";

cout << endl;

getchar()

;return0;

}

手撕演算法 排序

時間複雜度o n 2 o n 2 o n2 空間複雜度 o 1 穩定 從第乙個元素開始,認為左邊的序列是有序的,從有序部分的最後乙個向前比較,如果當前元素小於有序部分就交換,否則比較下乙個元素。function insertmerge arr else return arr let arr 1 5,...

Python手撕排序演算法

氣泡排序 公升序 歸併排序 公升序 分而治之 每次在若干無序資料中查詢最小數,放在無序資料的首位。1.從n個元素的列表中找最小值及其下標,與第乙個元素交換 2.從第二個元素開始的n 1個元素中找最小值及其下標,與第二個元素交換 3.以此類推,n 1輪後即為排好序的資料 a 49 38,65 97,7...

手撕演算法 adaboost

adaboost是典型的boosting演算法。boosting演算法的核心思想是 上乙個模型對單個樣本 的結果越差,下個模型越重視這個樣本 增大該樣本的權重,加大模型 錯的成本 提公升樹就是每個模型都是決策樹,提公升樹種效果比較好的是gbdt和xgboost,入門是adaboost。adaboos...