改進的起泡排序演算法

2022-09-24 01:45:08 字數 1054 閱讀 7898

一、基本思路:

氣泡排序是一種簡單的交換類排序。其基本思路是從頭開始掃瞄待排序的元素,在掃瞄過程中依次對相鄰元素進行比較,將關鍵字值大的元素後移。每經過一趟排序後,關鍵字值最大的元素將移到末尾,此時記下該元素的位置,下一趟排序只需要比較到此位置為止,直到所有元素都已有序排列。

一般地,對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輪,這就很沒必要。也就是說如果序列已經有序,每一輪排序還是會繼續比較相鄰的元素,這就相當於做了一些沒用的操作。這種情況下,如果我們能判斷出數列已經有序,並...