排序演算法筆記

2021-09-19 15:56:19 字數 2470 閱讀 5979

一些總結的比較好的部落格

1. 排序學習筆記

2. 部分排序方法的整理

1 外層迴圈將排序好的除去

2 內層迴圈將沒排好的陣列進行前後比較大小,每經過乙個迴圈,最大的數都在最後面

穩定排序,時間複雜度o(n2)

void

bubblesort

(vector<

int>

&arr)

//第一層下來最大的值已經冒泡到最上面的部分

return

;}

先找到第乙個數後的最小值,並將其與之交換(內層迴圈為找到最小值)

穩定,o(n2)

void

selecttsort

(vector<

int>

&arr)

swap

(arr,i,min);}

return

;}

1 外層迴圈是將排好續的陣列保留

2 內層迴圈是將拿到的陣列進行插入

可以是穩定的,o(n2)

//版本一

void

insertsort1

(vector<

int>

&arr)

}return;}

//版本二

/*** 直接插入排序,先挪位置直接插入

* */

void sort::

insertsort2

(vector<

int>

&arr)

}

遞迴分治

第一步: 將其劃分兩個區域 partition

第二分布: 左邊遞迴,右邊遞迴

可以做到穩定 o(nlogn)

void

quicksort

(int left,

int right)

//最終將基準數歸位

a[left]

= a[i]

; a[i]

= temp;

quicksort

(left, i-1)

;//繼續處理左邊的,這裡是乙個遞迴的過程

quicksort

(i+1

, right)

;//繼續處理右邊的 ,這裡是乙個遞迴的過程

}

排序成 左邊小,中間相等,右邊大的情況

第一步,利用兩個指標,乙個指向小的部分,乙個指向大的部分

第二部分,當前指標遍歷陣列,如果小魚目標值將起放到左邊,大於放到右邊,否則移動下標

快排的一部分,三路快排問題,不穩定 o(nlogn),

第一步:建立大根堆,當前節點的大於父節點時,將其與之交換,向上調整

第二步:將0位置的數與最後的位數交換,即根節點與尾節點交換

第三步:做heapify向下調整:找到當前節點與左右子節點的最大值,交換後向下延伸

不穩定排序 o(n)

void

push_down

(vector<

int>

&heap,

int size,

int u)

return;}

void

push_up

(vector<

int>

&heap,

int u)

return;}

void

heap_sort

(vector<

int>

&heap)

while

(n) heap.

erase

(heap.

begin()

);return

;}

第一步:找到中點

第二步 : 遞迴左右子陣列

第三步: 合併:此時分為三部分,先理好一遍沒有的,再理好一邊有的

穩定 o(nlogn)

void

merge_module

(vector<

int>

&nums,

int l,

int r)

while

(i <= mid) tmp.

push_back

(nums[i++])

;while

(j <= r) tmp.

push_back

(nums[j++])

;for

(i = l, j =

0; i <= r;

++i,

++j) nums[i]

= tmp[j]

;return;}

void

merge_sort

(vector<

int>

&nums)

排序演算法筆記

1 直接插入排序 on 2,穩定的 將最左邊的作為乙個有序數列 設立哨兵,比較並插入已形成的有序數列中。2 希爾排序 時效不好分析,不穩定 直接插入排序的公升級版,調整不同的增量d 2 縮小增量排序,3 快速排序的思想是分治思想 概括來就是在分治的過程中,每次以最後乙個元素為基準,兩個index指向...

演算法筆記 排序

o nlogn 比如 5,8,5,2,9 選擇排序演算法排序,第一次找到最小元素 2,與第乙個 5 交換位置,那第乙個 5 和中間的 5 順序就變了,所以不穩定 比如序列 6,8,7,6,3,5,9,4,在經過第一次分割槽操作之後,兩個 6 的相對先後順序就會改變 include include i...

演算法筆記 排序演算法 插入排序

插入排序的方法就類似於 在鬥地主發牌時,一張張牌地拿起並插入到自己手中的牌堆中。假設陣列 arr 有n個無序元素。每一次的插入就是在區間 0,i 中找到 arr i 1 對應的位置並插入。0,i 就相當於我們手中牌堆,arr i 1 就相當於下一張要插入的牌。直到沒有下乙個要插入的數,該陣列就變得有...