假設排序陣列a[n],按從小到大排列
inta = ;
int length = a.length;
準備好交換方法
private voidswap(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;如果中途排序好了,就不會再進入a[j] < a[j-1] if分支,flag就為false值,將退出迴圈比較流程for(int i = 0
; i < length && flag;i++)
}}
演算法評估:如果為最糟情況,陣列剛好是從大到小排序的,用冒泡演算法實現從小到大的排序
則比較交換次數是(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 沒有優化...