氣泡排序與選擇排序的不同 快速排序與選擇排序的結合

2022-02-19 12:13:12 字數 976 閱讀 7807

氣泡排序與選擇排序的不同、快速排序與選擇排序的結合

氣泡排序可以說是最簡單的排序了。我們學習c語言迴圈的時候都會提到。

可見這是一種淺而易懂的排序演算法!

但不見得這種演算法就沒用處。首先,他很容易理解,這樣在各種教材中比較適合拿來「開門見山」。其次是他很穩定。 若明確知道即將排的數字很混亂,隨機性很強,則用氣泡排序也未償不可。 誰讓他始終是o(n^2)呢。

氣泡排序法**:

1void

bubblesort(

inta,

intl)

213}14

}15}從中我們可以看到,每次都會將後面的l-(i+1)個數拿來和a[i]比較,然後將小一點的換到前面。有人就覺得啊,這個每次都交換很費效能,影響效率。所以他們就將a[j]和a[i]比較後的最小值的下標記下來,當比較完之後,最後記下的下標就是最小的值的下標,然後再進行一次交換。於是便有了選擇排序法。

選擇排序法**:

1void

selectsort(

inta,

intl)

213}14

intt 

=a[i];

15a[i]

=a[k];

16a[k]=t;

17}18

}雖然,我們並沒有根本性地扭轉氣泡排序的地位。但效率是有明顯提公升的,至少減少了l*(l-1)-l = l*(l-2) = l^2 - 2*l次交換!

另外,目前廣為使用的快速排序和選擇排序聯合使用,也會有意想不到的提公升!

眾所周知,當用快速排序法排序時,劃分到很細的時候,明顯很虧。 比如:兩三個數排序卻要劃分成兩堆,這樣很划不來。所以,我們可以設定乙個閥值,當快速排序劃分到一定粒度的時候,便採用選擇排序。 至於這個閥值,可以通過performace來測試,以得到乙個「最優值」

1void

qsort(

inta,

intl,

intr)

214}15

}

氣泡排序與選擇排序的不同 快速排序與選擇排序的結合

氣泡排序可以說是最簡單的排序了。我們學習c語言迴圈的時候都會提到。可見這是一種淺而易懂的排序演算法!但不見得這種演算法就沒用處。首先,他很容易理解,這樣在各種教材中比較適合拿來 開門見山 其次是他很穩定。若明確知道即將排的數字很混亂,隨機性很強,則用氣泡排序也未償不可。誰讓他始終是o n 2 呢。氣...

氣泡排序,選擇排序,快速排序

1.氣泡排序 氣泡排序 bubble sort 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間o n 2 void bubblesort int arr in...

氣泡排序 選擇排序 快速排序

氣泡排序的思想在於,不斷地將當前元素與後乙個元素進行比較,如果當前元素較小,則調換當前元素與後乙個元素的位置,否則保持不變 假設需要排序的元素一共有n個,從第乙個元素開始,對後續的 n 2 元素進行上述比較,最終的排序結果中,最後的元素是最大值。def bubble sort alist n len...