一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java經典算法匯總之冒泡排序

Java經典算法匯總之冒泡排序

2020-04-19 13:33神話丿小王子 JAVA教程

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

 

原理:比較兩個相鄰的元素,將值大的元素交換至右端。

思路:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。重復第一趟步驟,直至全部排序完成。

舉例說明:要排序數組:int[]arr={6,3,8,2,9,1};

第一趟排序:

    第一次排序:6和3比較,6大于3,交換位置:368291

    第二次排序:6和8比較,6小于8,不交換位置:368291

    第三次排序:8和2比較,8大于2,交換位置:362891

    第四次排序:8和9比較,8小于9,不交換位置:362891

    第五次排序:9和1比較:9大于1,交換位置:362819

    第一趟總共進行了5次比較, 排序結果: 362819

---------------------------------------------------------------------

第二趟排序:

    第一次排序:3和6比較,3小于6,不交換位置:362819

    第二次排序:6和2比較,6大于2,交換位置:326819

    第三次排序:6和8比較,6大于8,不交換位置:326819

    第四次排序:8和1比較,8大于1,交換位置:326189

    第二趟總共進行了4次比較, 排序結果: 326189

---------------------------------------------------------------------

第三趟排序:

    第一次排序:3和2比較,3大于2,交換位置:236189

    第二次排序:3和6比較,3小于6,不交換位置:236189

    第三次排序:6和1比較,6大于1,交換位置:231689

    第二趟總共進行了3次比較, 排序結果: 231689

---------------------------------------------------------------------

第四趟排序:

    第一次排序:2和3比較,2小于3,不交換位置:231689

    第二次排序:3和1比較,3大于1,交換位置:213689

    第二趟總共進行了2次比較, 排序結果: 213689

---------------------------------------------------------------------

第五趟排序:

    第一次排序:2和1比較,2大于1,交換位置:123689

    第二趟總共進行了1次比較, 排序結果: 123689

---------------------------------------------------------------------

最終結果:123689

---------------------------------------------------------------------

由此可見:N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數,即

?
1
2
3
4
5
6
7
for(int i=1;i<arr.length-1;i++){
 
  for(int j=1;j<arr.length-1-i;j++){
 
  //交換位置
 
}

冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之后,排在最后的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最后一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數后面,第三趟比較的時候,只需要比較除了最后兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了算法的量。

用時間復雜度來說:

  1.如果我們的數據正序,只需要走一趟即可完成排序。所需的比較次數和記錄移動次數均達到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的時間復雜度為O(n)。

  2.如果很不幸我們的數據是反序的,則需要進行n-1趟排序。每趟排序要進行n-i次比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:Java經典算法匯總之冒泡排序冒泡排序的最壞時間復雜度為:O(n2)。

綜上所述:冒泡排序總的平均時間復雜度為:O(n2)。

代碼實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
 * 冒泡排序
 */
public class BubbleSort {
  public static void main(String[] args) {
    int[] arr={6,3,8,2,9,1};
    System.out.println("排序前數組為:");
    for(int num:arr){
      System.out.print(num+" ");
    }
    for(int i=1;i<arr.length;i++){//外層循環控制排序趟數
      for(int j=1;j<arr.length-i;j++){//內層循環控制每一趟排序多少次
        if(arr[j-1]>arr[j]){
          int temp=arr[j];
          arr[j]=arr[j-1];
          arr[j-1]=temp;
        }
      }
    }
    System.out.println();
    System.out.println("排序后的數組為:");
     for(int num:arr){
       System.out.print(num+" ");
     }
  }
 }

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: se01在线看片 | 欧美人伦禁忌.5 | 特级夫妻大片免费在线播放 | 精品欧美一区二区三区在线观看 | 大伊香蕉精品视频一区 | 久久免费看少妇级毛片蜜臀 | 久热人人综合人人九九精品视频 | 国产 日韩 欧美 综合 | 午夜国产在线 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | 国产福利你懂的 | 国产精品视频在线观看 | chinese一tk视频丨vk | 国产精品99在线观看 | www.亚洲视频.com| 欧美日韩国产精品va | 国产资源在线视频 | 东方影视欧美天天影院 | 国产美女亚洲精品久久久综合 | 精品国产91久久久久久久 | 7788av| 欧美久久一区二区三区 | 日韩永久在线观看免费视频 | 欧美一区二区三区成人看不卡 | 亚洲国产成人久久综合一区77 | 欧洲肥女大肥臀 | 6080午夜| 色老板在线免费视频 | 日韩在线视频免费观看 | 国产福利视频一区二区微拍视频 | 好舒服好爽再快点视频 | 91欧美秘密入口 | 骚b小说| 91动漫在线观看 | 99热这里有免费国产精品 | 九色PORNY丨视频入口 | 欧美调教打屁股spank视频 | 爱福利视频一区 | 亚洲国产精品一区二区三区久久 | 四虎影院精品 | 俄罗斯三级完整版在线观看 |