為啥氣泡排序的最優時間複雜度是on不是o1啊

2021-03-04 09:15:33 字數 2459 閱讀 9874

1樓:匿名使用者

就是o(n),維基百科是對的~

初始時陣列中的數就已經排列完成了的話,還需要掃一遍陣列的,所以是o(n)~

不懂可問,滿意望採納謝謝!

以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排

2樓:木頭釋然

在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為o(n2) ,插入排序o(n2),選擇排序o(n2),氣泡排序o(n2)。所以abcd時間複雜度是一樣的。

在快速排序演算法中,最為關鍵的就是選取一個基值,將陣列分為大於基值以及小於基值兩部分,並返回基值所以在位置以利用於遞迴劃分。

對陣列a,設需要劃分的其中一段為a[p]~a[r],我們期待的結果是得到一個q,其中p<=q<=r,使得a[p]~a[q-1]<=a[q]<=a[q+1]~a[r],這個時候原先的一段陣列被分成了三部分。

首先,設基值為這段陣列的最後一個元素a[r],我們希望最後得到的結果是a[r]現在對應的值在演算法結束後可以排在比他大和小的兩部分的中間愛。

然後令i=p-1; j=p,當發現有a[j]>x時,j繼續前進,不需要任何移動。當發現a[j]<=x時,我們需要將這個元素放到小於基值的一邊,於是將i自加1,並交換此時a[i],與a[j]的元素,然後j自加1。這個時候i指向的是比基值小的那段資料的最後一個元素,j指向的是第一個還沒有判斷的剩餘元素。

上面一步不斷迴圈直到j指向了r,此時只剩下r沒有和基值判斷了,而a[r]本來就是基值,而除了a[r]以外,a[p]~a[i]是小於基值的部分,a[i+1]~a[r-1]是大於基值的部分,所以此時只需交換a[i+1]和a[r]即可。

由於對陣列a從頭到尾掃描一次就可以得到結果,因此這一部分演算法複雜度為o(n)

3樓:匿名使用者

1.選擇排序:不穩定,時間複雜度 o(n^2)

選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。

2.插入排序:穩定,時間複雜度 o(n^2)

插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l[i]插入l[1..

i-1]的適當位置,使得l[1..i] 又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。

首先比較l[i]和l[i-1],如果l[i-1]≤ l[i],則l[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某一個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。

3.氣泡排序:穩定,時間複雜度 o(n^2)

氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。

所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。

在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。

4.堆排序:不穩定,時間複雜度 o(nlog n)

堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。

5.歸併排序:穩定,時間複雜度 o(nlog n)

設有兩個有序(升序)序列儲存在同一陣列中相鄰的位置上,不妨設為a[l..m],a[m+1..h],將它們歸併為一個有序數列,並儲存在a[l..h]。

6.快速排序:不穩定,時間複雜度 最理想 o(nlogn) 最差時間o(n^2)

快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃描後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃描只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。

快速排序通過一趟掃描,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有一個元素為止。

幾種排序的時間複雜度,可以參考一下

4樓:匿名使用者

這幾個的最壞情況下的時間複雜度都是一樣的,一定要比較的話快排比較快,但氣泡排序比較穩定,最壞的話都是一樣的

5樓:匿名使用者

顯然都一樣,如果論平均時間就是快排最快o(nlogn),其餘的都是o(n^2),但快排最壞時間也是o(n^2)

6樓:匿名使用者

最壞的情況下好像都是n^2吧。

在最壞情況下,氣泡排序的時間複雜度為

n n 1 2 n n 1 2 o n n 1 2 o n n 1 2 在最壞的情況下氣泡排序的時間複雜度是什麼 氣泡排序的演算法時間複雜度上 最壞情況下 是 o n 2 氣泡排序是這樣實現的 首先將所有待排序的數字放入工作列表中。從列表的第一個數字到倒數第二個數字,逐個檢查 若某一位上的數字大於他...

時間複雜度為On的排序演算法,你會嗎

排序方法 最壞時間複雜度 最好時間複雜度 平均時間複雜度直接插入 o n2 o n o n2 簡單選擇 o n2 o n2 o n2 起泡專排序屬 o n2 o n o n2 快速排序 o n2 o nlog2n o nlog2n 堆排序 o nlog2n o nlog2n o nlog2n 歸併排...

演算法的時間複雜度與初始排序無關的都有什麼排序

常見的幾種排序演算法複雜度如下 方式 平均 最壞 最好 插入 n 回2 n 2 n 希爾 n 1.3 冒泡 n 2 n 2 n 快速 nlogn n 2 nlogn 選擇 n 2 n 2 n 2 堆排答 nlogn nlogn nlogn 歸併 nlogn nlogn nlogn 基數 d n r ...