經典排序(一)

2021-09-23 20:21:14 字數 2470 閱讀 3545

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

1.1 演算法描述

比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;

針對所有的元素重複以上的步驟,除了最後乙個;

1.2 演算法分析

最佳情況:t(n) = o(n) 最差情況:t(n) = o(n2) 平均情況:t(n) = o(n2)

1.3 **實現

用乙個布林值減少不必要的迴圈:var issort = true

//swift**

func

bubblesort

( list:

[int])

->

[int]}

if issort

}return mylist

}

選擇排序是最穩定的排序之一,因為無論什麼資料時間複雜度都是o(n2)

唯一的好處就是不占用額外的記憶體空間。

2.1 演算法描述

選擇排序(selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

2.2 **實現

//swift

public

func

selectionsort

(alist:

[int])

->

[int]}

let temp = list[minindex]

list[minindex]

= list[i]

list[i]

= temp

}return list

}

插入排序(insertion-sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間

3.1 演算法描述

從第乙個元素開始,該元素可以認為已經被排序;

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;

如果該元素(已排序)大於新元素,將該元素移到下一位置;

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;

將新元素插入到該位置後;

重複步驟2~5。

3.2 **實現

//swift

public

func

insertionsort

(alist:

[int])

->

[int

] j = j -1if

!isneedsort }}

return list

}

快速排序 - (類似於選擇排序的定位思想)選一基準元素,依次將剩餘元素中小於該基準元素的值放置其左側,大於等於該基準元素的值放置其右側;然後,取基準元素的前半部分和後半部分分別進行同樣的處理;以此類推,直至各子串行剩餘乙個元素時,即排序完成(模擬二叉樹的思想,from up to down)

時間複雜度:o(nlogn)

func

quicksort

(a:inout

[int

], low:

int, high:

int)

var i = low

var j = high

let key = a[i]

while i < j

// 只要出現乙個比key小的數,將這個數放入左邊i的位置

a[i]

= a[j]

// 從左邊開始比較,比key小的數字置不變

while i < j && a[i]

<= key

// 只要出現乙個比key大的數,將這個數放入右邊j的位置

a[j]

= a[i]

} a[i]

= key // 將key放入i的位置,則左側數都比key小,右側數都比key大

quicksort

(a:&a, low: low, high: i -1)

// 左遞迴

quicksort

(a:&a, low: i +

1, high: high)

// 右遞迴

}

經典排序演算法(一) 氣泡排序

氣泡排序是最基礎的一種排序方法,在我們剛接觸程式語言的迴圈時,常常會接觸到這種演算法,利用的是氣泡越冒越大的原理。它的時間複雜度為o n 2 具體原理如下 假設現在有一行待排序的數 1,5,2,6,3 利用氣泡排序演算法時,程式是這樣執行的。1 第一組排序 找出最大的數並放至隊尾 程式會拿出這一行數...

經典演算法(一) 氣泡排序

校園招聘馬上就要來臨了,作為過來人,演算法在筆試中必考,因為畢竟是學生,大部分沒有專案經驗,只能問一些基礎的知識!今天帶大家學習演算法中的經典 氣泡排序,也是去年我參加筆試考的最多的演算法之一。一 演算法描述 氣泡排序 依次比較相鄰的資料,將小資料放在前,大資料放在後 即第一趟先比較第1個和第2個數...

經典排序 氣泡排序

氣泡排序思想介紹 核心思想 相鄰兩個數之間比較,把大的數往右換,最終每經過一次內層迴圈,就把當前未排序的陣列的最大值換到最右邊去了 如果是從大到小排序,就把小的數往右換,換到最後那個數就是最小的 時間複雜度 氣泡排序的時間複雜度為o n 2 很好理解,內外層迴圈 下面貼上 void bubble s...