java冒泡排序算法

碼頭工人 9年前發布 | 1K 次閱讀 Java JavaScript

/**

  • 冒泡排序:執行完一次內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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!