雙向氣泡排序 和 單向氣泡排序 演算法分析比較

2021-05-23 10:23:44 字數 972 閱讀 2420

假設單向氣泡排序也是 在如果沒有交換發生的情況下則終止(即changeflag==false的情況下).

以下是單向氣泡排序

1、最差情況:假設輸入打下為n

1)單向排序

需要進行n次外迴圈,n次changeflag=false;賦值和後面的比較判斷,即2*n。每次外迴圈有n-i-1次內迴圈,(內迴圈總數為0+1+2+…+(n-1)=n*(n-1)/2次迴圈。每次內迴圈需要進行兩次比較,三次賦值,(2+3)*n*(n-1)/2.

所以最差時間複雜度為2*n+5*n*(n-1)/2=5/2*n^2-n/2=o(n^2);

2)雙向排序

//除去那些列印的附加資訊,需要進行n/2上取整 次數的do--while迴圈,需要進行兩次賦值和一次比較,比較內部還有一次賦值,即4*n/2,每次do-while內部需要一次for迴圈,每次for迴圈4次賦值和4次比較,而第一次for迴圈次數為0到n-2,第二次for迴圈(反向)次數為n-3到0,第三次for迴圈次數為1到n-3,第四次為n-4到2。所以為(n-1)+(n-2)+(n-3)+…+(1)=n*(n-1)/2.

所以總共:4*n/2+8*n*(n-1)/2=4*n^2-2*n=o(n^2)。但是如果去除

在最差情況下還不如 單向冒泡,但是都是o(n^2)的時間複雜度。

但是雙向的優點在於每次能夠記住最後一次交換的位置,而且兩邊都可以記住,也就是說假設10個數中, 只有少數幾個數是亂的,假設1到10,2,3,4,5,1,10,6,7,8,9。單向排序需要5次(1到最前面需要4次+依次無交換檢測)迴圈,使得最大的10,次大的9,……最小的1依次在各自位置。

雙向需要3次(1到最前面一次,10到最後面1次,再加上一次無交換檢測)。優點在於少量的打亂的情況下,雙向能夠記錄當前的交換的位置,縮短迴圈的區間。

單向是:n-1,n-2,n-3….0

雙向可以是:n-1,n-2(前兩次),其他的可以是很小的區間pos[0]到pos[1],區間最大值等於單向,但是基本上都小於單向的。    

選擇排序,氣泡排序,雙向氣泡排序

氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...

選擇排序,氣泡排序,雙向氣泡排序

首先是選擇排序,原理 1 找到未排序的數中最小的數放到最前面 2 陣列後移一位 3 重複上面兩部。void selectsorting if min a i swap b i b t 這個應該是我第乙個接觸到的排序演算法,結果第一次打排序水題直接上冒泡,直接接了一發tle 才知道有nlogn的演算法...

氣泡排序 與 雙向氣泡排序

public class test if k 0 break last k public static void bidirectionalbubblesort int a last k for int m last m first m first k if first last break pub...