一、基本思路:
氣泡排序是一種簡單的交換類排序。其基本思路是從頭開始掃瞄待排序的元素,在掃瞄過程中依次對相鄰元素進行比較,將關鍵字值大的元素後移。每經過一趟排序後,關鍵字值最大的元素將移到末尾,此時記下該元素的位置,下一趟排序只需要比較到此位置為止,直到所有元素都已有序排列。
一般地,對n個元素進行氣泡排序,總共需要進行n-1趟。第1趟需要比較n-1次,第2趟需要比較n-2次,......第i趟需要比較n-i次。
二、演算法
2.1原始起泡排序演算法
public static int bubblesort1(int arr) }}
return arr;
}2.2第一種改進 (在原始演算法基礎上)
用flag欄位控制迴圈的趟數,當某一趟比較下來,沒發生資料交換時說明資料都是有序的,就沒必要進行下一趟的比較了
public static int bubblesort2(int arr)
}// 如果上一次掃瞄沒有發生交換,則說明陣列已經全部有序,退出迴圈
if(!flag)
}return arr; }
2.3第二種改進(在原始演算法基礎上)
第一種是用flag 控制迴圈趟數來較少迴圈比較次數,此種方法是用乙個變數lastpos儲存每一趟最後進行資料交換的位置,在下一趟迴圈的時候只需要比較arr[0...lastpos]即可,而arr[lastpos...n]已經有序了。
public static int bubblesort3(int arr)
}lastpos=flagpos;//作為下次比較的最後下標
} return arr; }
2.4 第三種改進(第一和第二種的合併 ,效能是較一二好,取一和二的長處合併)
flag控制迴圈趟數,lastpos控制每趟迴圈的的最後下標
public static int bubblesort4(int arr)
}lastpos=flagpos;
// 如果上一次掃瞄沒有發生交換,則說明陣列已經全部有序,退出迴圈
if(!flag)
}return arr; }
陣列排序演算法之起泡法
起泡法是從一端開始比較的,第一次迴圈就是把最大數放到最後乙個位置,第二次迴圈就是把第二最大數放到倒數第二位置。整個過程就像燒開水一樣,較小值像水中的氣泡一樣逐趟往上冒,每一趟都有一塊 最大 的石頭沉到水底。有乙個包含n個元素的數值型陣列,陣列元素大小無序。遍歷一次陣列,將陣列中最大的值排至最後一位的...
起泡排序 快速排序
起泡排序和快速排序都屬於交換排序,時間複雜度均為o n 2 其中心思想是各資料之間的比較,然後交換其位置,以實現有序的操作。所謂交換,就是根據序列中兩個記錄鍵值的比較結果來 對換這兩個記錄在序列中的位置,交換排序的特點是 將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的 前部一.起泡排序 又...
排序演算法 氣泡排序(改進)
假如我們運氣好,用了1輪就已經將整個序列排序好了,整個數列已然是有序的了。可是我們的排序演算法仍然 兢兢業業 地繼續執行第2輪 第3輪 直至n 1輪,這就很沒必要。也就是說如果序列已經有序,每一輪排序還是會繼續比較相鄰的元素,這就相當於做了一些沒用的操作。這種情況下,如果我們能判斷出數列已經有序,並...