經典排序演算法 氣泡排序

2022-07-09 10:39:11 字數 3736 閱讀 8877

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大 的數往下沉 ,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

關於程式中4中氣泡排序寫法的說明:

bubble_sort1:基本的氣泡排序的寫法。

bubble_sort2:基本氣泡排序的不同寫法,基本的氣泡排序是每次遍歷,每次縮小範圍1,這種辦法是每次正向和反向遍歷,每次縮小範圍2,所以兩者的比較次數也是一樣的。

bubble_sort3:如果在某一趟的冒泡途中沒有出現資料交換,那就只能是資料已經被排好序了,這樣就可以提前得知資料排好序從而中斷迴圈,消除掉不必要的比較。

bubble_sort4:如果在某一趟的冒泡途中最後的交換出現在pos的位置,那麼表示pos位置以後都已經排好序,這樣相比於基本冒泡每一次縮小遍歷範圍1而言有可能一次縮小的遍歷範圍》=1,所以這樣也可以提高排序的效率。

1

package

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語言的時候就已經學過了,最近這段時間想起來把比較經典的排序演算法拿來回顧一下,鞏固一下知識。氣泡排序的核心就是比較相鄰兩個數的大小,然後將小的 或者大的 放到前面去,經過一趟之後,就能把最小或者最大的放到最前面,第二趟排序的時候,第乙個數不參與排序,從第二個數開始,經過一趟...

經典排序演算法 氣泡排序

對列表的無序部分從頭至尾掃瞄一遍,掃瞄過程中通過不斷交換相鄰兩個元素,最終把最大 小 元素交換到列表末尾。首先比較第一和第二個數,把較大的放在第二位。比較第二個和第三個數,再把較大的數放在第三位。如此比較下去,直到比較完最後兩個數。這樣就把整個列表中最大的數交換到了末尾。上面三步只是完成了對列表無序...

經典排序演算法 氣泡排序

氣泡排序的原理是從第乙個數字開始,依次讓相鄰的兩個數字進行比較,按照從大到小或從小到大的順序進行交換 如果是公升序排列就把小的放前面,如果降序排列就把大的放前面 第一趟比較後,就把最大的的數字放在最後乙個位置 假設按照公升序排列 然後進行第二趟比較,依次進行相鄰數字比較,第二趟比較後次大的數字放在了...