對於長度為n的序列,採用氣泡排序法進行排序,一定要進行n

2021-04-20 07:42:57 字數 3189 閱讀 6183

1樓:匿名使用者

這是錯的,參考冒bai

泡的**比du較交換**

for(j=0;ja[i+1])//陣列zhi元素大小按升序排列}第一個daofor迴圈專是n-1, 第二個for迴圈是n -1 -j, 氣泡排序屬的時間複雜度是o(n^2)

以下排序演算法最壞情況下時間複雜度最低的是 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吧。

定義一個函式sort,用改進的氣泡排序法對一個長度為n的整型陣列進行排序

7樓:匿名使用者

你好很高興為你解答

答案是:

#include

#include

#include

void sort(int a,int n)}if(flag==0)break; }}int main()

滿意請採納,謝謝!

8樓:汪升超

#include

#include

#include

void sort(int a,int n)}if(flag==0)break;}}

int main()

(1)假設線性表的長度為n,則在最壞情況下,氣泡排序需要的比較次數為

9樓:匿名使用者

氣泡排序法是一種bai最簡du單的交換類排序方法,它zhi是通過相鄰資料元素

dao的交換逐步將線性表

專變成有序。

假設屬線性表的長度為n,則在最壞的情況下,氣泡排序需要經過n/2遍的從前往後的掃描和n/2遍的從後往前的掃描,需要的比較次數為n(n-1)/2

10樓:匿名使用者

非專業解答 選a

離散數學遞迴問題 由0,1,2組成的長度為n的序列,所有元素

解題思路,可以設f i j 表示長度為i的序列總和對2的餘數是j的情況有多少種 那麼專f i j f i 1 1 j f i 1 j 2是這麼個遞推公式,你說的遞迴屬是直接列舉有哪些序列嗎?然後把這些序列的數字加起來看看是不是偶數這樣嗎?那樣的複雜度很高的,有3 n次方 include includ...

長度為節的二進位制整數,採用補碼錶示,且由1和0組成,則可以表示的最大十進位制整數為 詳細點 謝謝

補碼的最高位是符號位,正數為0,負數為1,所以由5個1和3個0所能組成的最大二進位制數是 01111100,轉換成十進位制就是124 長度為一個位元組的二進位制整數,若採用補碼錶示,且由5個 1和3個0 組成,則可表示的最小十進位制整數為 113,用5個1和3個0組成的二進位制補碼數,可表示的最小十...

求和為10的子序列

include using namespace std int main int k 6 i,t 0 for k 0 0 k 0 2 k 0 for k 1 0 k 1 2 k 1 for k 2 0 k 2 2 k 2 for k 3 0 k 3 2 k 3 for k 4 0 k 4 2 k 4...