在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大 的數往下沉 ,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
關於程式中4中氣泡排序寫法的說明:
bubble_sort1:基本的氣泡排序的寫法。
bubble_sort2:基本氣泡排序的不同寫法,基本的氣泡排序是每次遍歷,每次縮小範圍1,這種辦法是每次正向和反向遍歷,每次縮小範圍2,所以兩者的比較次數也是一樣的。
bubble_sort3:如果在某一趟的冒泡途中沒有出現資料交換,那就只能是資料已經被排好序了,這樣就可以提前得知資料排好序從而中斷迴圈,消除掉不必要的比較。
bubble_sort4:如果在某一趟的冒泡途中最後的交換出現在pos的位置,那麼表示pos位置以後都已經排好序,這樣相比於基本冒泡每一次縮小遍歷範圍1而言有可能一次縮小的遍歷範圍》=1,所以這樣也可以提高排序的效率。
1package
mecrt.study.collection.sort;23
/**4
* 氣泡排序5*/
6public
class
bubblesort ;
10int b = ;
11int c = ;
12int d = ;
13 system.out.println("\n初始值:");
14print(a);
15int count1 =dubblesort1(a);
16 system.out.println("排序後:");
17print(a);
18 system.out.println("dubblesort1比較次數"+count1);
1920
21 system.out.println("\n初始值:");
22print(b);
23int count2 =dubblesort2(b);
24 system.out.println("排序後:");
25print(b);
26 system.out.println("dubblesort2比較次數"+count2);
2728 system.out.println("\n初始值:");
29print(c);
30int count3 =dubblesort3(c);
31 system.out.println("排序後:");
32print(c);
33 system.out.println("dubblesort3比較次數"+count3);
3435 system.out.println("\n初始值:");
36print(d);
37int count4 =dubblesort4(d);
38 system.out.println("排序後:");
39print(d);
40 system.out.println("dubblesort4比較次數"+count4);41}
4243
/**44
* 最基本的氣泡排序
45*
@param
data
46*/
47public
static
int dubblesort1(int
data)57}
58}59return
count;60}
6162
/**63
* 雙向氣泡排序
64*
@param
data
65*/
66public
static
int dubblesort2(int
data)75}
76 high--;
77for (j = high; j > low; j--,count++) 81}
82 low++;83}
84return
count;85}
8687
/**88
* 氣泡排序,如果在某一趟的冒泡途中沒有出現資料交換,
89* 那就只能是資料已經被排好序了,
90* 這樣就可以提前得知資料排好序從而中斷迴圈,
91* 消除掉不必要的比較。
92*
@param
data
93*
@return
94*/
95public
static
int dubblesort3(int
data)
104}
105}
106return
count;
107}
108109
/**110
* 如果在某一趟的冒泡途中最後的交換出現在pos的位置,
111* 那麼表示pos位置以後都已經排好序,
112* 這樣相比於基本冒泡每一次縮小遍歷範圍1而言有可能一次縮小的遍歷範圍》=1,
113* 所以這樣也可以提高排序的效率。
114*
@param
data
115*
@return
116*/
117public
static
int dubblesort4(int
data)
125}
126}
127return
count;
128}
129public
static
void swap(int data,int i,int
j)133 data[i] = data[i] +data[j];
134 data[j] = data[i] -data[j];
135 data[i] = data[i] -data[j];
136}
137138
private
static
void print(int
a)142
system.out.println();
143}
144 }
執行結果:
初始值:3 5 1 2 4 9 6 8 10 7排序後:
1 2 3 4 5 6 7 8 9 10dubblesort1比較次數45
初始值:
3 5 1 2 4 9 6 8 10 7排序後:
1 2 3 4 5 6 7 8 9 10dubblesort2比較次數45
初始值:
3 5 1 2 4 9 6 8 10 7排序後:
1 2 3 4 5 6 7 8 9 10dubblesort3比較次數30
初始值:
3 5 1 2 4 9 6 8 10 7排序後:
1 2 3 4 5 6 7 8 9 10dubblesort4比較次數33
時間複雜度:o(n^2)
空間複雜度:o(1)
穩定性:穩定
經典排序演算法,氣泡排序
氣泡排序是本人在大一學習c語言的時候就已經學過了,最近這段時間想起來把比較經典的排序演算法拿來回顧一下,鞏固一下知識。氣泡排序的核心就是比較相鄰兩個數的大小,然後將小的 或者大的 放到前面去,經過一趟之後,就能把最小或者最大的放到最前面,第二趟排序的時候,第乙個數不參與排序,從第二個數開始,經過一趟...
經典排序演算法 氣泡排序
對列表的無序部分從頭至尾掃瞄一遍,掃瞄過程中通過不斷交換相鄰兩個元素,最終把最大 小 元素交換到列表末尾。首先比較第一和第二個數,把較大的放在第二位。比較第二個和第三個數,再把較大的數放在第三位。如此比較下去,直到比較完最後兩個數。這樣就把整個列表中最大的數交換到了末尾。上面三步只是完成了對列表無序...
經典排序演算法 氣泡排序
氣泡排序的原理是從第乙個數字開始,依次讓相鄰的兩個數字進行比較,按照從大到小或從小到大的順序進行交換 如果是公升序排列就把小的放前面,如果降序排列就把大的放前面 第一趟比較後,就把最大的的數字放在最後乙個位置 假設按照公升序排列 然後進行第二趟比較,依次進行相鄰數字比較,第二趟比較後次大的數字放在了...