成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java排序之冒泡排序

開發 前端
每一輪都需要從第一位開始進行相鄰的兩個數的比較,將較大的數放后面,比較完畢之后向后挪一位繼續比較下面兩個相鄰的兩個數大小關系,重復此步驟,直到最后一個還沒歸位的數。

?jwt簡介

冒泡排序:(Bubble Sort)是一種簡單的交換排序。之所以叫做冒泡排序,因為我們可以把每個元素當成一個小氣泡,根據氣泡大小,一步一步移動到隊伍的一端,最后形成一定對的順序。

冒泡排序的原理:

我們以一個隊伍站隊為例,教官第一次給隊員排隊是無序的,這時候就需要排隊,按矮到高的順序排列,首先拎出第一第二個比較,如果第一個隊員比第二個要高,則兩個交換位置, 高的放到排到第二個位置,矮的就排到第一個,再把第二個,第三個比較,把高的排到后面一個位置,然后以此類推,直至第一輪所有隊員都比較過一次(記住每次比較都是相鄰的兩個),這樣就可以把最高的排到最后的位置。

總結就是: 每一輪都需要從第一位開始進行相鄰的兩個數的比較,將較大的數放后面,比較完畢之后向后挪一位繼續比較下面兩個相鄰的兩個數大小關系,重復此步驟,直到最后一個還沒歸位的數。

冒泡排序流程圖:

圖片

我們進行分解看看每一步是怎么執行的

首先我們給個無序數組 [3,14,32,16,53,8] 進行升序排序

  • 第一輪:初始值[3,14,32,16,53,8]

圖片

如圖所示,走完第一輪之后,我們得到的結果就是[3,14,16,32,8,53],此時已經將最大的數53排到了指定位置,所以冒泡排序每一輪只能確定將一個數歸位。即第一趟只能確定將末位上的數歸位, 第二趟只能將倒數第 2 位上的數歸位,依次類推下去

  • 第二輪:初始值[3,14,16,32,8,53]

圖片

第二輪排序結果[3,14,16,8,32,53]

  • 第三輪:初始值[3,14,16,8,32,53]

圖片

第三輪排序結果[3,14,8,16,32,53]

  • 第四輪:初始值[3,14,8,16,32,53]

圖片

第四輪排序結果[3,8,14,16,32,53]

  • 第五輪:初始值[3,8,14,16,32,53]

圖片

第五輪排序結果[3,8,14,16,32,53] 到這,我們最終排序完成。

Java代碼實現:

 public static void bubbleSort(int[] array){
for(int i=0;i<array.length-1;i++){//控制比較輪次,一共 n-1
int num = 0; //用來記錄比每輪比較的次數
for(int j=0;j<array.length-1;j++){//控制兩個挨著的元素進行比較
if(array[j] > array[j+1]){
//換位
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
//比較一次,加1
num =num+1;

}
//結果輸出
System.out.print("第"+(i+1)+"輪:[");
for (int a=0;a<array.length; a++){
if(a!=array.length-1)
{
System.out.print(array[a]+",");
}else{
System.out.print(array[a]+"]");
}
}
System.out.println(",比較了:"+num+" 次");
}
}

輸出結果

   第1輪結果:[3,14,16,32,8,53],每輪比較了:5 次
第2輪結果:[3,14,16,8,32,53],每輪比較了:5 次
第3輪結果:[3,14,8,16,32,53],每輪比較了:5 次
第4輪結果:[3,8,14,16,32,53],每輪比較了:5 次
第5輪結果:[3,8,14,16,32,53],每輪比較了:5 次

我在每輪比較的時候定義了一個num來記錄比較次數,大家可以看到長度為6的數組比較,比較了5輪,每輪都比較了5次, 但是通過上面拆分的每一輪比較細節可以看出,其實約到后面的比較,有一部分已經是排好了,如果某個數比他的下一個位置還小, 就沒有必要和后面已經排好的數據再做比較,這樣只會增加程序運行壓力。

比如,第四輪,8和14比較,換位之后,16,32,53都已經排好了,14再和16比較,不用換位,那16之后的數據已經在第三輪排好,就沒必要再比較16和32,32和53了。

那我們來對程序做一個優化,其實在第一輪把最大的數字排到最后之后,第二輪就不用再和最后一個數字比較,因為最大的數字已經排好,再比較也只能排在最后一位之前了。

優化: 

優化代碼如下:

   public static void bubbleSort(int[] array){
for(int i=0;i<array.length-1;i++){//控制比較輪次,一共 n-1
int num = 0; //用來記錄比每輪比較的次數
//每一輪比較一次就排除最后一位,每輪的最后一位一定是這輪最大的,所以-i,
for(int j=0;j<array.length-1-i;j++){//控制兩個挨著的元素進行比較
//換位
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
//比較一次,加1
num =num+1;

}
//結果輸出
System.out.print("第"+(i+1)+"輪結果:[");
for (int a=0;a<array.length; a++){
if(a!=array.length-1)
{
System.out.print(array[a]+",");
}else{
System.out.print(array[a]+"]");
}
}
System.out.println(",每輪比較了:"+num+" 次");
}
}

我們再來看看結果:

第1輪結果:[3,14,16,32,8,53],每輪比較了:5 次
第2輪結果:[3,14,16,8,32,53],每輪比較了:4 次
第3輪結果:[3,14,8,16,32,53],每輪比較了:3 次
第4輪結果:[3,8,14,16,32,53],每輪比較了:2 次
第5輪結果:[3,8,14,16,32,53],每輪比較了:1 次

由此,我們可以看到,由之前30次比較減少到15次,所以程序壓力會少很多,程序復雜度也降低了。由上面結果可知:6位長度的數組需要排五輪,每輪次數減1,那如果由n個長度的數組,需要比較多少次呢?

  • 第一輪:6-1
  • 第二輪:6-2
  • 第三輪:6-3
  • 倒數第二輪:2
  • 倒數第一輪:1

得出結果:(n-1)+(n-2)+...+2+1 = n(n-1)/2 =1/2n^2 -1/2n是一個等差數列,按照時間復雜度規則,直接取最高階項并去除常熟系數等到時間復雜度就是 O(n^2)了

到這,我們的冒泡排序就了解完了。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2020-07-05 09:12:42

java冒泡排序算法

2011-04-20 14:07:37

冒泡排序

2019-10-30 08:53:46

JavaScript冒泡排序選擇排序

2009-09-10 16:30:11

C#排序函數

2023-03-06 08:10:52

數據結構算法數據

2009-12-11 16:44:33

PHP冒泡排序

2012-10-31 10:25:52

排序

2009-08-10 16:19:37

C#冒泡排序

2021-01-21 05:22:36

排序算法選擇

2017-03-25 21:13:38

JavaScript排序

2018-11-21 10:47:46

排序算法TimsortPython

2015-10-20 15:09:55

排序算法

2021-10-14 08:58:48

Java冒泡排序

2009-09-02 17:16:01

冒泡排序

2023-03-02 08:15:13

2023-10-04 00:02:00

本文將從入門到精通,冒泡排序

2021-01-19 07:02:26

算法數據結構堆排序

2010-01-11 15:01:55

VB.NET冒泡排序

2011-04-20 11:22:51

Java

2010-02-06 16:16:01

C++冒泡排序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91伊人| 午夜精品一区二区三区免费视频 | 黄网站涩免费蜜桃网站 | 成人日韩| 一区二区三区高清 | 狠狠操电影| 浴室洗澡偷拍一区二区 | 华丽的挑战在线观看 | 亚洲欧美视频一区 | 色婷婷综合久久久中字幕精品久久 | 亚洲国产一区二区三区在线观看 | 91网在线播放| 九九热九九 | 手机在线不卡av | www.887色视频免费 | 综合精品在线 | 欧美激情国产日韩精品一区18 | 亚洲精品一区二区三区 | 天天操妹子 | 神马九九 | 国产精品精品久久久久久 | 999久久久| 黄色小视频入口 | 极品的亚洲 | 一区二区日韩 | 国产99久久久国产精品 | 精品国产乱码一区二区三区a | 成人精品在线观看 | 久久午夜精品福利一区二区 | 日一区二区 | 亚洲国产精品视频一区 | 成人av网站在线观看 | 一区二区三区四区国产 | 国内精品久久久久久影视8 最新黄色在线观看 | 91av视频在线 | 日韩在线欧美 | 国产精品欧美一区二区 | 精精国产xxxx视频在线野外 | 国产精品久久国产精品99 | 国产成人精品久久久 | 国产传媒视频在线观看 |