什么是冒泡排序役首?
冒泡排序(Bubble Sort)是一種簡單的排序算法莱衩。它重復地走訪過要排序的數列,一次比較兩個元素慢睡,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換铡溪,也就是說該數列已經排序完成漂辐。
這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名冒泡排序棕硫。
冒泡排序實現原理
冒泡排序算法的運作如下:(從后往前)
1.比較相鄰的元素髓涯。如果第一個比第二個大,就交換他們兩個哈扮。
2.對每一對相鄰元素作同樣的工作纬纪,從開始第一對到結尾的最后一對。在這一點灶泵,最后的元素應該會是最大的數育八。
3.針對所有的元素重復以上的步驟,除了最后一個赦邻。
4.持續(xù)每次對越來越少的元素重復上面的步驟髓棋,直到沒有任何一對數字需要比較。
示意圖:
性能分析:
若記錄序列的初始狀態(tài)為"正序"惶洲,則冒泡排序過程只需進行一趟排序按声,在排序過程中只需進行n-1次比較,且不移動記錄恬吕;反之签则,若記錄序列的初始狀態(tài)為"逆序",則需進行n(n-1)/2次比較和記錄移動铐料。因此冒泡排序總的時間復雜度為O(n*n)渐裂。
冒泡排序:穩(wěn)定算法
冒泡排序的三種算法實現(優(yōu)化):
1豺旬、冒泡排序 ?
/**
* 第一種直接冒泡
* @param a
*/
public static void BubbleSort1(int a[])
{
int i, j;
int temp = 0;
for (i = 0; i < a.length; i++)
for (j = 1; j < a.length - i; j++)
if (a[j - 1] > a[j]) {
temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
for (int x : a) {
System.out.print(x + "? ");
}
}
?2、標志位方法
public static void BubbleSort2(int a[]) {
int j, k;
boolean flag;
k = a.length;
flag = true;
while (flag) {
flag = false;
for (j = 1; j < k; j++)
if (a[j - 1] > a[j]) {
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
flag = true;
}
k--;
}
for (int i : a) {
System.out.print(i + " ");
}
}
3柒凉、前面無序 后面有序的情況
/**
* 前面無序 后面有序的
*/
public static void BubbleSort3(int a[]) {
int j, k;
int flag;
flag = a.length;
while (flag > 0) {
k = flag;
flag = 0;
for (j = 1; j < k; j++)
if (a[j - 1] > a[j]) {
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
flag = j;
}
}
for (int i : a) {
System.out.print(i + " ");
}
}
注:冒泡排序算法是一個效率比較低下的算法族阅,小數據的時候無所謂,如果數據量比較大的話還是建議選擇其他算法