国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - JAVA教程 - java利用冒泡排序對數組進行排序

java利用冒泡排序對數組進行排序

2019-12-18 17:00一羽清寧 JAVA教程

這篇文章主要介紹了java利用冒泡排序對數組進行排序的方法,實例分析了冒泡排序的概念與java實現方法,以及java操作數組的相關技巧,需要的朋友可以參考下

本文實例講述了java利用冒泡排序對數組進行排序的方法。分享給大家供大家參考。具體如下:

一、冒泡排序:

利用冒泡排序對數組進行排序

二、基本概念:

依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。至此第一趟結束,將最大的數放到了最后。在第二趟:仍從第一對數開始比較(因為可能由于第2個數和第3個數的交換,使得第1個數不再小于第2個數),將小數放前,大數放后,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。

三、實現思路:

用二重循環實現,外循環變量設為i,內循環變量設為j。假如有n個數需要進行排序,則外循環重復n-1次,內循環依次重復n-1,n-2,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,n-1,對于每一個i,j的值依次為0,1,2,...n-i 。

設數組長度為N:
1.比較相鄰的前后二個數據,如果前面數據大于后面的數據,就將二個數據交換。
2.這樣對數組的第0個數據到N-1個數據進行一次遍歷后,最大的一個數據就“沉”到數組第N-1個位置。
3.N=N-1,如果N不為0就重復前面二步,否則排序完成。

四、java代碼實現:

?
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
27
28
29
30
31
32
33
34
package ArrayDemo;
/**
 * @author pplsunny
 * @category .21
 */
public class ArrayDemo {  
  /**
   * 用增強for循環輸出排序結果
   */
  public static void main(String[] args) {
   int[] a = { 2, 4, 76, 12, 34, 23, 86 };
   ArrayDemo.bubbleSort(a);
   for (int b : a) {
    System.out.print(b + " ");
   }
  }
  /*
   * 冒泡排序函數,定義為靜態的方便使用,
 * 也是開發中定義工具類的一個方法
   */
  public static void bubbleSort(int a[]) {
   for (int i = 1; i < a.length; i++) {
   //這是控制趟數
    for (int j = 0; j < a.length - i; j++) {
    //j < a.length - i,比較元素的個數
     if (a[j] > a[j + 1]) {
      int temp = a[j];
      a[j] = a[j + 1];
      a[j + 1] = temp;
     }
    }
   }
  }
}

五、性能分析:

若記錄序列的初始狀態為"正序",則冒泡排序過程只需進行一趟排序,在排序過程中只需進行n-1次比較,且不移動記錄;反之,若記錄序列的初始狀態為"逆序",則需進行n(n-1)/2次比較和記錄移動。因此冒泡排序總的時間復雜度為O(n*n)。

六、算法優化:

冒泡排序法存在的不足及改進方法:
第一,在排序過程中,執行完最后的排序后,雖然數據已全部排序完備,但程序無法判斷是否完成排序,為了解決這一不足,可設置一個標志位flag,將其初始值設置為非0,表示被排序的表是一個無序的表,每一次排序開始前設置flag值為0,在進行數據交換時,修改flag為非0。在新一輪排序開始時,檢查此標志,若此標志為0,表示上一次沒有做過交換數據,則結束排序;否則進行排序;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* 冒泡排序函數改進版
*/
public static void BubbleSort(int[] a) {
  boolean flag = true;
  while (flag) {
   flag = false;
   for (int i = 0; i < a.length - 1; i++) {
    for (int j = 0; j < a.length - i ; j++) {
     if (a[j] > a[j + 1]) {
      int temp = a[j];
      a[j] = a[j + 1];
      a[j + 1] = temp;
      flag = true;
     }
    }
    if (!flag)
     break; // 如果沒有發生交換,則退出循環 
   }
  }
}

第二、在冒泡排序中,一趟掃描有可能無數據交換,也有可能有一次或多次數據交換,在傳統的冒泡排序算法及近年來的一些改進的算法中,只記錄一趟掃描有無數據交換的信息,對數據交換發生的位置信息則不予處理。為了充分利用這一信息,可以在一趟全局掃描中,對每一反序數據對進行局部冒泡排序處理,稱之為局部冒泡排序。局部冒泡排序與冒泡排序算法具有相同的時間復雜度,并且在正序和逆序的情況下,所需的關鍵字的比較次數和移動次數完全相同。由于局部冒泡排序和冒泡排序的數據移動次數總是相同的,而局部冒泡排序所需關鍵字的比較次數常少于冒泡排序,這意味著局部冒泡排序很可能在平均比較次數上對冒泡排序有所改進,當比較次數較少的優點不足以抵消其程序復雜度所帶來的額外開銷,而當數據量較大時,局部冒泡排序的時間性能則明顯優于冒泡排序。對于N個無序數據,我們在進行一趟冒泡排序時,如果第k個數據和第k+1個數據逆序,那么對第k+1個數據進行一趟向前的冒泡排序,使其移動到合適的位置,也就是說讓前面k+1個數據調節為正序。因為這種冒泡法只對前k+1個數據冒泡處理,所以我們稱它為——局部冒泡

希望本文所述對大家的java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产日韩精品视频 | 一区视频 | 操操操av| 亚洲日本电影 | 亚洲日韩中文字幕在线播放 | 国产精品亚洲一区二区三区 | www中文在线观看 | 国产精品久久久久久久久久久久久 | 国产日韩欧美精品 | 干干人人| 欧美一区永久视频免费观看 | 超碰91在线 | 亚洲伊人伊色伊影伊综合网 | 欧美精品区| 黄色电影免费在线观看 | 噜噜噜在线 | 精品一区二区久久久久久久网站 | 久久久亚洲综合 | 午夜欧美精品久久久久 | 狠狠天天| 久久99精品久久久久久国产越南 | 久久天堂视频 | 婷婷精品久久久久久久久久不卡 | 亚洲自拍偷拍综合 | 亚洲 欧美 日韩在线 | 日韩中文字幕视频 | 一区二区免费在线视频 | 日韩在线精品强乱中文字幕 | 精品一级 | 午夜羞羞视频 | 北条麻妃在线一区二区免费播放 | 一区二区三区在线视频播放 | 国产亚洲精品女人久久久久久 | 欧美国产一区二区三区 | 日韩中文字幕免费在线播放 | 五月天伊人 | 色吧综合网 | 欧美国产一区二区三区 | 毛片视频免费 | 羞羞视频在线播放 | 午夜视频免费 |