swift演算法之排序 (一)氣泡排序

2021-09-23 22:23:16 字數 2901 閱讀 4345

1、概述

氣泡排序是一種簡單的演算法,是指重複遍歷需要排序的元素列,一次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母a~z等)錯誤就把他們交換過來,遍歷的目的是重複的進行指導沒有相鄰元素需要交換 即該元素列已經排序完成。

2、演算法原理

1)比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個

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

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

4)持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

3、舉例

需要對 1 4 6 2 8 這5個數按照從大到小的順序進行排序

1)首先,對第一位和第二位進行比較,明顯 1<4,所以交換 1 和 4 的位置

2)繼續比較第二位和第三位,發現 1<6,所以交換 1 和 6 的位置

3)繼續比較第三位和第四位,1<2 ,交換 1 和 2 的位置

4)最後比較 第四位和第五位 ,1<8 ,交換 1 和 8 的位置

經過上面一輪的比較,我們發現,1是最小的,且放在了最後。

下面是1上浮的過程,為什麼說是上浮?是由於數字是儲存在陣列中的,在swift中,陣列是先進後出的,棧一般在swift的實現都是通過陣列。並且1的上浮過程像水泡從水底上浮到水面,所以 演算法 叫 氣泡排序

剩餘的元素依次按照上述操作繼續比較,把最小的2放在倒數第二位,以此類推,最大的8位於首位

4、演算法實現

1)一般實現

按照冒泡的原理,一般實現為

func bubblesort(_ array : [int])}}

print(list)

print("count: ",count)

}注:資料的交換過程在swift中有3種

1)定義變數交換

let tmp = list[j]

list[j] = list[i]

list[i] = tmp

2)陣列自帶的交換方法

list.swapat(i, j)

3)使用元祖的交換方法

(list[i], list[j]) = (list[j], list[i])

4)也可以自定義swap方法

5)swift自帶的交換方法

swap(&list[i], &list[j])

2)外層優化

當發現在某一趟排序中沒有發生交換,則說明排序已經完成,所以可以在此趟排序後結束排序,在每趟排序前設定flag,當其未發生變化時,終止演算法

func bubblesort1(_ array : [int])

}if flag

}print(list)

print("count: ",count)

}

3)內層優化

每趟排序中,最後一次發生交換的位置後面的資料均以有序,所以可以記住最後一次交換的位置來減少排序的趟數

func bubblesort2(_ array : [int])

}k = swap

if flag

}print(list)

print("count: ",count)

}

4)方法的使用

print("冒泡")

let array = [1,3,6,9,0,5,2,4,8,7]

sortsummary.bubblesort(array)

sortsummary.bubblesort1(array)

sortsummary.bubblesort2(array)

print("\n")

執行結果:

冒泡[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

count: 9

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

count: 9

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

count: 4

注:可以從執行的迴圈次數看出,內層優化次數減少了

5、時間複雜度1)最好的情況下 即待排序的陣列本身是有序的,比較次數為n-1,沒有資料交換,即o(n)

2)最壞的情況下 即待排序的陣列是完全逆序的,比較次數為n*(n-1)/2,即o(n^2)

3)平均複雜度 o(n^2)

github**

注:排序的具體實現**在 sortsummary.swift

檔案裡 呼叫是在

viewcontroller.swift

排序演算法之氣泡排序(一)

氣泡排序是最常使用的一種排序演算法,演算法思想是從頭到尾遍歷陣列,將相鄰的兩個值進行比較,小的放在前面,大的放在後面。這樣第一趟排序之後,最後乙個位置所放的元素就是最大的值,第二趟排序之後,倒數第二個元素也排好了。經過n次排序之後,所有的值就排序完成了。比如無序陣列 3,1,4,2,5 第一躺 1,...

排序演算法之氣泡排序

參考 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。若...

排序演算法之氣泡排序

對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...