java冒泡排序算法
/**
- 冒泡排序:執行完一次內for循環后,最小的一個數放到了數組的最前面。相鄰位置之間交換 *
- 兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反時即進行交換,直到沒有反序的數據元素為止。
- 設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡
- ,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上
- "漂浮",如此反復進行,直至最后任何兩個氣泡都是輕者在上,重者在下為止。 */
public class BubbleSort {
/**
* 排序算法的實現,對數組中指定的元素進行排序
*
* @param array
* 待排序的數組
* @param from
* 從哪里開始排序
* @param end
* 排到哪里
* @param c
* 比較器
*/
public void bubble(Integer[] array, int from, int end) {
// 需array.length - 1輪比較
for (int k = 1; k < end - from + 1; k++) {
// 每輪循環中從最后一個元素開始向前起泡,直到i=k止,即i等于輪次止
for (int i = end - from; i >= k; i--) {
// 按照一種規則(后面元素不能小于前面元素)排序
if ((array[i].compareTo(array[i - 1])) < 0) {
// 如果后面元素小于了(當然是大于還是小于要看比較器實現了)前面的元素,則前后交換
swap(array, i, i - 1);
}
}
}
}
/**
* 交換數組中的兩個元素的位置
*
* @param array
* 待交換的數組
* @param i
* 第一個元素
* @param j
* 第二個元素
*/
public void swap(Integer[] array, int i, int j) {
if (i != j) {// 只有不是同一位置時才需交換
Integer tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
/**
* 測試
*
* @param args
*/
public static void main(String[] args) {
Integer[] intgArr = { 7, 2, 4, 3, 12, 1, 9, 6, 8, 5, 11, 10, 53, 28,
19, -4, -9, -1, 0, -7, 8, 7, 8, 1 };
BubbleSort bubblesort = new BubbleSort();
bubblesort.bubble(intgArr, 0, intgArr.length - 1);
for (Integer intObj : intgArr) {
System.out.print(intObj + " ");
}
}
}</pre>
本文由用戶 admin 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!