演算法學習 5

2021-07-26 08:17:35 字數 929 閱讀 6504

快速排序也是一種採用分治策略的演算法,它與歸併排序不同的是,它是原址排序,不需要額外的空間。

如果把要排序的陣列簡單從任何位置切成兩個子陣列,對子陣列排序後,又因為是原址排序,排序後的兩個子陣列分別都是有序的,但是作為乙個整體很顯然未必就是是有序的呢

所以分解肯定就不能是簡單的把陣列切斷成兩個子陣列。而是首先找乙個陣列元素作為主元,然後找出比主元小的元素放到主元的坐邊,大的數放到右邊,然後對左邊的子陣列和右邊的子陣列排序,排好以後顯然整個陣列也是有序的,what a **** clever!

這個分解的步驟形式化的名詞就是劃分——partition

排序的偽**:

//接受乙個陣列,左下標,右下標,比只接受乙個陣列引數更靈活

quick-sort(a,p,r)

if p < r //這個條件不滿足,表示沒有元素要排序,函式什麼都不做

q = partition(a,p,r) //劃分陣列返回主元的下標

quick-sort(a,p,q-

1) quick-sort(a,q+

1,r)

else

return

接下來就是如何實現partition了

partition(a,p,r)

//選做好乙個元素做主元

x = a[r]

i = p - 1

for j=p to r-1

ifa[j] < x

i = i + 1

exchange a[i] with a[j]

//迴圈之後a[p..i]都小於x,a[i+1,..,r-1]都大於等於x

exchange a[i+1] with a[r]

//a[i+1]左邊的元素都小於自己,右邊的元素都大於自己

return i+1

演算法學習5

乙個最大堆 package com.example.demo.algorithm author aloli date 2020 9 10 13 35 乙個最大堆 public class maxheap public maxheap int size if size maxsize this siz...

排序演算法學習(5)

1.將2個各有n個元素的有序表歸併成乙個有序表,其最少的比較次數是 n 分析 歸併排序最少比較n,最多比較2n 1.當第乙個有序表中所有的元素都小於 或大於 第二個表中的元素,只需要用第二個表中的第乙個元素依次與第乙個表的元素比較,總計比較n次。分析二 a a0,a1,an b b0,b1,bn 為...

演算法學習Task5

k means演算法 聚類與分類的區別,分類的目標事先已知,而聚類是一種無監督學習,目標未知 具體方法有距離 密度 層次 網格 圖論 k means演算法基於距離 1 確定簇的個數k,可以通過經驗以及交叉檢驗可以 2 初始選取k個中心點,採用k means 加速收斂,即選擇樣本點中任意乙個作為第乙個...