排序演算法只冒泡排序
1.時間復雜度,
冒泡排序是一種交換排序,是從陣列中選取第一個數,和其他數字做比較,如果所選取的數字大于其他的數字,就做交換,時間復雜度最好的情況是O(n),這種就是只經歷一輪比較就得出準確的結果,最壞的情況是O(n2),因為執行了兩次for回圈,先上代碼吧
public static void main(String[] args) {
int[] arr = {7, 1, 9, 3, 6};
int[] arr2 = sort(arr);
for (int i : arr2) {
System.out.println(i);
}
}
public static void sort(int []arr){
int tmp = 0;
for (int i = 0;i < arr.length;i++){
for (int j = i + 1;j < arr.length;j++){
if (arr[i] > arr[j]){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}

第一層for回圈用來確定第幾個數字,與其他數字做比較,所以開始是第一個元素7與第二個元素做1比較,

因為arr[i] > arr[j] : arr[0] > arr[1] :7 > 1,交換7和1.得到上面所示情況,

j++,7和9比較,7 < 9,不做交換,

j++,7和3做比較,7 > 3,交換7和3,

j++,7和5做比較,7 > 5,交換7和5.

此時第一輪結束,i++,自增為1,所以從元素3開始,

經過1輪,i++,此時arr[i] = arr[1] = 3,arr[j] = 9,3 和 9 做比較,3 不大于 9,不進行交換,

j++,3 和 5 做比較,3 不大于 5,不進行交換,

j++,3 和 7 做比較,3 不大于 7,不進行交換,

i++,進行第三輪,首先9 和 5 作比較,9 > 5 ,交換,

j++,9 和 7 做比較,9 > 7 ,交換,

此時陣列有序,排序結束,
穩定性分析
冒泡排序就是把小的元素往前調或者把大的元素往后調,比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間,如果兩個元素相等,那么不會進行交換,所以冒泡排序是穩定的排序演算法,
冒泡排序演算法改進
冒泡排序是每個數字向后沉,只確定了最大值,可以在每次回圈之中進行正反兩次冒泡,分別找到最大值和最小值,如此可使排序的輪數減少一半,提升效率,這里只指出思路,可以嘗試寫下,啦啦啦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/151182.html
標籤:其他
上一篇:Java學習記錄(3)
