以下排序演算法最壞情況下時間複雜度最低的是A 氣泡排序B

2021-05-17 17:04:17 字數 5331 閱讀 9138

1樓:木頭釋然

在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為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)

2樓:匿名使用者

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。

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

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

3樓:匿名使用者

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

4樓:匿名使用者

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

5樓:匿名使用者

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

在最壞的情況下,下列排序方法中時間複雜度最小的是()a.氣泡排序 b.快速排序 c.插入排序d.堆排序

6樓:匿名使用者

答案是d,堆排序。

選項中的四種排序方法的最壞時間複雜度、最好時間複雜度 、平均時間複雜度分別為:

a、氣泡排序: o(n2) 、o(n) 、o(n2)。

b、快速排序: o(n2) 、o(nlog2n)、 o(nlog2n)。

c、插入排序: o(n2)、 o(n) 、o(n2)。

d、堆排序: o(nlog2n)、 o(nlog2n)、 o(nlog2n)。

所以,在最壞情況下,氣泡排序時間複雜度=快速排序時間複雜度=插入排序時間複雜度= o(n2)>堆排序時間複雜度= o(nlog2n)。答案選d。

7樓:匿名使用者

排序方法 最壞時間複雜度 最好時間複雜度

平均時間複雜度

直接插入 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)

歸併排序 o(nlog2n) o(nlog2n) o(nlog2n)

所以選d

下列排序方法中,最壞情況下比較次數最少的是()為什麼 ?a)氣泡排序 b)簡單選擇排序 c)直接插入排序 d)堆

8樓:上官影汐

最壞情況下:直接選擇排序:每次都要執行交換,總移動次數為(n-1)次交換 o(n)

氣泡排序:每比較一次都要進行一次交換 ,移動次數為 3n(n-1)/2 o(n2)

直接插入排序:n2/4 o(n2)堆排序: o(nlog2n)

所以,應該選d

下列排序方法中,最壞情況下比較次數最少的是 a)氣泡排序

9樓:匿名使用者

最壞情況下比較次數最少的為d)堆排序:

a)氣泡排序 需要比較o(n^2)次(n(n - 1)/2次),即序列逆序的情況

b)簡單選擇排序,無論是否最壞都需要o(n^2)次(n(n - 1)/2次)

c)直接插入排序,最壞情況需要比較o(n^2)次(n(n - 1)/2次)

d)堆排序,無論是否最壞比較o(nlog2n)次

e)快速排序,最壞情況退化為氣泡排序,需要比較o(n^2)次(n(n - 1)/2次)

10樓:和藹的曾海永

最壞情況下比較次數最少的為d)堆排序

延展回答:

a)氣泡排序 需要比較o(n^2)次(n(n - 1)/2次),即序列逆序的情況

b)簡單選擇排序,無論是否最壞都需要o(n^2)次(n(n - 1)/2次)

c)直接插入排序,最壞情況需要比較o(n^2)次(n(n - 1)/2次)

d)堆排序,無論是否最壞比較o(nlog2n)次

e)快速排序,最壞情況退化為氣泡排序,需要比較o(n^2)次(n(n - 1)/2次)

下面的排方法中,最壞的情況下比較次數最少的是( ) a氣泡排序 b簡單選擇排序 c直接插入排序 d 堆排序 5

11樓:匿名使用者

從原理上給你推導下:

1.冒泡法: 這是最原始,也是眾所周知的最慢的演算法了。

他的名字的由來因為它的工作看來象是冒泡: #include void bubblesort(int* pdata,int count) }while(i <=j);//如果兩邊掃描的下標交錯,就停止(完成一次) //當左邊部分有值(left i),遞迴右半邊 if(right>i) run(pdata,i,right); } void quicksort(int* pdata,int count) void main() ; quicksort(data,7); for (int i=0;i <7;i++) cout < void bubble2sort(int* pdata,int count) pdata[w+k] = itemp; } } } void main() ; shellsort(data,12); for (int i=0;i <12;i++) cout <

〔演算法〕排序的最低時間複雜度為什麼是o(nlogn)

12樓:匿名使用者

這個首先要明確一點,只用到比較的排序演算法最低時間複雜度是o(nlogn),而

內像桶排這樣的容只需要o(r)(r為桶的大小)

為了證明只用到比較的排序演算法最低時間複雜度是o(nlogn),首先要引入決策樹。

首先決策樹是一顆二叉樹,每個節點表示元素之間一組可能的排序,它予以京進行的比較相一致,比較的結果是樹的邊。

先來說明一些二叉樹的性質,令t是深度為d的二叉樹,則t最多有2^片樹葉。

具有l片樹葉的二叉樹的深度至少是logl。

所以,對n個元素排序的決策樹必然有n!片樹葉(因為n個數有n!種不同的大小關係),所以決策樹的深度至少是log(n!),即至少需要log(n!)次比較。

而log(n!)=logn+log(n-1)+log(n-2)+...+log2+log1

>=logn+log(n-1)+log(n-2)+...+log(n/2)

>=(n/2)log(n/2)

>=(n/2)logn-n/2

=o(nlogn)

所以只用到比較的排序演算法最低時間複雜度是o(nlogn)。

氣泡排序在最壞的情況下的比較次數為什麼是n n

氣泡排序如1,2,3,4最好的情況是按完全升級排列,最壞就是數字完全按降序排列 第一次是1 然後1和2,3,4 第2次是2 比較誰比它小交換,於是2和34交換,答案是3421 第3次為3 3和4 最後是4321 這就是最壞情況下的次數3 2 1 6 4 3 2 其實對於n個的話,你要求降低排列,但是...

電腦開機時間正常情況下是多少時間

機器配置越高,相同配置下的xp啟動速度越快。開機優化過的xp即便在低配置機器上也有可能比未作開機優化的高配置機器開機速度快。兩者之間沒有必然關係。其實不用太在意開機時間,我家電腦配置e8400 4g ddr3 1333 st32m 300g硬碟每次開機大概需要3分鐘,我有1年多沒重做系統了,無所謂,...

請問這樣情況下的託福準備時間多少為適宜

關於託福如何準備,我列出以下幾點參考 1 託福要求的詞彙量有8000多,所以您首先要迅速拿下託福詞彙。因為託福詞彙基本都屬於常用詞彙加學科詞彙,所以非常好記,如果順利的話一個半月的時間就非常非常富裕了,可以從匹克模考tpo裡面記憶詞彙。2 托福考試中聽力部分是重中之重,雖然中國考生普遍閱讀 聽力部分...