常見排序演算法小結

2021-07-26 05:51:50 字數 1336 閱讀 4242

常見排序演算法時間和複雜度如下圖

氣泡排序核心**對於陣列a[n]

for(int i=0;i}}

改進:即使當發現陣列已經有序是跳出迴圈,使用方法就是在設定乙個flag,發現第二層的for迴圈一次都沒有進行交換就是表明陣列已經是有序的。

時間複雜度o(n^2);

插入排序有3種,直接插入排序,二分插入排序,希爾插入排序

(1)直接插入核心**

public

static

void

sort(int a)

b[j+1]=a[i];}}

時間複雜度o(n^2).

(2)希爾排序

所謂希爾排序就是利用了直接插入排序,不過是把資料長度截成多個部分,gap就是所謂步長,我們知道,當插入排序的資料是有序時,最快,二隨著gap縮小,序列也就漸漸有序,當gap=1是相當於直接插入排序

核心**

public

static

void

shellsort(int a)

}

快排的話常見的方式就是用遞迴,然後還有優化就是可以與插入排序結合的使用,另外三像切分快排主要用於重複元素很多的那種情況-》見我另外一篇部落格快排及常見的兩種優化方法

利用的二叉樹這個資料結構,並用到優先佇列,優先佇列,

先構建乙個這樣的二叉樹,即是父節點比大於子節點,然後再對這個有序完全二叉樹進行排序,這裡用到乙個方法,叫下沉,即sink

private

void sink(int str,int k,int length)

}

堆排序核心主要這個方法進行構建堆和將堆排序。

先構建乙個有序堆

public void heapsort(int a)

while(length>1)

}

ps:以上比較都是以int為例,如果是非基本型別我們可以用comparable來比較,讓物件實現這個介面,比較用compare即可

參考:

希爾排序參考

常見的排序演算法小結

一 根據時間複雜度對排序演算法進行分類,其中n為資料樣本個數 1 複雜度為平方階o n 2 冒泡 選擇 插入排序 2 複雜度為o nlogn 快速 堆 歸併排序 3 複雜度為o n 1 希爾排序,其中 是介於0到1之間的 4 線性階o n 桶 箱 基數排序 二 排序演算法穩定性分析 1 穩定性的演算...

常見排序演算法Java小結

原想將一些常見排序演算法做個小的android demo,以供偶爾檢視,後來發覺不太必要,故只記錄一些核心演算法,以便查詢。ps 此處均預設排序從小到大,序列不為空。1 選擇排序 1 選擇排序 public void select int nums temp nums size 1 i nums s...

常見排序演算法小結一(C 實現)(未完)

插入排序 與 希爾排序 選擇排序 與 堆排序 氣泡排序 快速排序 氣泡排序的改進 歸併排序 堆排序基數排序 桶排序計數排序 各種排序演算法的視覺化過程見 visualgo 為了對比各個排序演算法的效能,實現sort.cpp。static bool issorted int a,int len 測試陣...