冒泡演算法(兩兩比較,最小上冒)

2021-07-27 10:36:49 字數 1113 閱讀 7698

假設排序陣列a[n],按從小到大排列

int 

a = ;

int length = a.length

;

準備好交換方法

private void 

swap(int j, int i)

排序好後列印

for(int k = 0

; k < length;k++)

1.冒泡演算法(兩兩比較,把小的往左移)

a[n] 和 a[n-1]比較,如果a[n-1] 大於 a[n] 則把a[n]和a[n-1]互換,這樣a[n-1] < a[n]

接著再把a[n-1] 和a[n-2]比較。。。。。。。。。。。。。。。。a[n-2] < a[n-1]

。。。。。

最後把a[1]和a[0]比較。。。。。。。。。。。。。。。。。。。a[0] < a[1]

通過上述一輪比較,陣列a最小的數被移到了最左邊a[0]中,像泡泡冒到了最左邊

以上是由a[n]到a[0]的比較,現在a[0]已排好

接下來進行a[n]到a[1]的比較,現在a[1]已排好

。。。。

最後a[n]到a[n-1]的比較,a[n-1]已排好

經過上述步驟,完成冒泡演算法的排序

實現如下:

for(int i = 0

; i < length;i++)

}}

改進:如果是

經過a[n]到a[0]的第一次迴圈後,2和1交換,已全部排好序,後續的迴圈比較就沒有必要了,所以我們設定乙個標誌位來進行控制:

boolean flag = true;

for(int i = 0

; i < length && flag;i++)

}}

如果中途排序好了,就不會再進入a[j] < a[j-1] if分支,flag就為false值,將退出迴圈比較流程

演算法評估:如果為最糟情況,陣列剛好是從大到小排序的,用冒泡演算法實現從小到大的排序

則比較交換次數是(n-1) + (n-2) + (n-3)+。。。。 + 1 = n(n +1)/2

時間複雜度為o(n^2)

015拼多多 兩兩配對差值最小

問題描述 給定乙個長度為偶數的陣列arr,將該陣列中的數字兩兩配對並求和,在這些和中選出最大和最小值,請問該如何兩兩配對,才能讓最大值和最小值的差值最小?輸入描述 一共2行輸入。第一行為乙個整數n,2 n 10000,第二行為n個數,組成目標陣列,每個數大於等於2,小於等於100。輸出描述 輸出最小...

牛客 2019拼多多 兩兩配對差值最小

題目描述 給定乙個長度為偶數的陣列arr,將該陣列中的數字兩兩配對並求和,在這些和中選出最大和最小值,請問該如何兩兩配對,才能讓最大值和最小值的差值最小?輸入描述 一共2行輸入。第一行為乙個整數n,2 n 10000,第二行為n個數,組成目標陣列,每個數大於等於2,小於等於100。輸出描述 輸出最小...

兩種氣泡排序的比較及冒泡演算法優化

第一種 void bubblesort int array,int len if noswap break 第二種 void bubblesort int array,int len if noswap break 沒有優化 void bubblesort1 int arr,int len 沒有優化...