欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

冒泡排序的原理及java代碼實(shí)現(xiàn)

 更新時(shí)間:2016年02月02日 11:33:18   投稿:hebedich  
冒泡排序法:關(guān)鍵字較小的記錄好比氣泡逐趟上浮,關(guān)鍵字較大的記錄好比石塊下沉,每趟有一塊最大的石塊沉底。算法本質(zhì):(最大值是關(guān)鍵點(diǎn),肯定放到最后了,如此循環(huán))每次都從第一位向后滾動(dòng)比較,使最大值沉底,最小值上升一次,最后一位向前推進(jìn)

概述

冒泡排序是一種簡單的排序算法。它重復(fù)地走訪要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的開始。

簡單點(diǎn)說,就是:

冒泡排序是將比較大的數(shù)字沉在數(shù)組的后面(可以理解為下面),較小的浮在前面(上面)。

直觀釋義圖:

步驟

比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
實(shí)例

原始數(shù)據(jù):

3 5 2 6 2
第一輪

比較 3 和 5,5 大于 3 ,不需交換
3 5 2 6 2
繼續(xù)比較 5 和 2,5 大于 2,交換位置
3 2 5 6 2
繼續(xù)比較 5 和 6,6 大于 5,不需交換
3 2 5 6 2
繼續(xù)比較 6 和 2,6 大于 2,交換位置
3 2 5 2 6
6 下沉到最后,兩個(gè)2都分別向上(前)冒出。

第二輪

比較 3 和 2, 3 大于 2,交換位置
2 3 5 2 6
比較 3 和 5, 5 大于 3,不需交換
2 3 5 2 6
比較 5 和 2, 5 大于 2,交換位置
2 3 2 5 6
不需比較 5 和 6

第三輪

比較 2 和 3, 3 大于 2,不需交換
2 3 2 5 6
比較 3 和 2, 3 大于 2,交換位置
2 2 3 5 6
不需比較了

第四輪

比較 2 和 2,不需交換
2 2 3 5 6

四輪結(jié)束

2 2 3 5 6

代碼實(shí)現(xiàn)(Java)

package com.coder4j.main.arithmetic.sorting;

public class Bubble {

  /**
   * 冒泡排序
   * 
   * @param array
   * @return
   */
  public static int[] sort(int[] array) {
    int temp;
    // 第一層循環(huán)表明比較的輪數(shù), 比如 length 個(gè)元素,比較輪數(shù)為 length-1 次(不需和自己比)
    for (int i = 0; i < array.length - 1; i++) {
      System.out.println("第" + (i + 1) + "輪開始");
      // 第二層循環(huán),每相鄰的兩個(gè)比較一次,次數(shù)隨著輪數(shù)的增加不斷減少,每輪確定一個(gè)最大的,不需比較那個(gè)最大的
      for (int j = 0; j < array.length - 1 - i; j++) {
        if (array[j + 1] < array[j]) {
          temp = array[j];
          array[j] = array[j + 1];
          array[j + 1] = temp;
        }
        System.out.println("第" + (i + 1) + "輪,第" + (j + 1) + "次比較:");
        for (int k : array) {
          System.out.print(k + " ");
        }
        System.out.println();
      }
      System.out.println("結(jié)果:");
      for (int k : array) {
        System.out.print(k + " ");
      }
      System.out.println();
    }
    return array;
  }

  public static void main(String[] args) {
    int[] array = { 3, 5, 2, 6, 2 };
    int[] sorted = sort(array);
    System.out.println("最終結(jié)果");
    for (int i : sorted) {
      System.out.print(i + " ");
    }
  }

}

測試輸出結(jié)果:

第1輪開始
第1輪,第1次比較:
3 5 2 6 2 
第1輪,第2次比較:
3 2 5 6 2 
第1輪,第3次比較:
3 2 5 6 2 
第1輪,第4次比較:
3 2 5 2 6 
結(jié)果:
3 2 5 2 6 
第2輪開始
第2輪,第1次比較:
2 3 5 2 6 
第2輪,第2次比較:
2 3 5 2 6 
第2輪,第3次比較:
2 3 2 5 6 
結(jié)果:
2 3 2 5 6 
第3輪開始
第3輪,第1次比較:
2 3 2 5 6 
第3輪,第2次比較:
2 2 3 5 6 
結(jié)果:
2 2 3 5 6 
第4輪開始
第4輪,第1次比較:
2 2 3 5 6 
結(jié)果:
2 2 3 5 6 
最終結(jié)果
2 2 3 5 6 

經(jīng)測試,與實(shí)例中結(jié)果一致。

相關(guān)文章

  • Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天

    Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天

    ChatGPT已經(jīng)組件放開了,現(xiàn)在都可以基于它寫插件了,也許可以用它結(jié)合文字語音開發(fā)一個(gè)老人小孩需要的智能的說話陪伴啥的,這篇文章就介紹SpringBoot結(jié)合ChatGPT實(shí)現(xiàn)AI聊天感興趣的同學(xué)可以借鑒一下
    2023-04-04
  • Java中定時(shí)器Timer致命缺點(diǎn)案例詳解

    Java中定時(shí)器Timer致命缺點(diǎn)案例詳解

    這篇文章主要介紹了Java中定時(shí)器Timer致命缺點(diǎn),以Java中定時(shí)器Time為案例整理下我的學(xué)習(xí)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java 深入探討設(shè)計(jì)模式之原型模式篇

    Java 深入探討設(shè)計(jì)模式之原型模式篇

    設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
    2021-10-10
  • springsecurity基于token的認(rèn)證方式

    springsecurity基于token的認(rèn)證方式

    本文主要介紹了springsecurity基于token的認(rèn)證方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解在java中進(jìn)行日期時(shí)間比較的4種方法

    詳解在java中進(jìn)行日期時(shí)間比較的4種方法

    這篇文章主要介紹了詳解在java中進(jìn)行日期時(shí)間比較的4種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • MyBatis框架簡介及入門案例詳解

    MyBatis框架簡介及入門案例詳解

    MyBatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)jdbc的操作數(shù)據(jù)庫的過程進(jìn)行封裝,使開發(fā)者只需要關(guān)注SQL本身,而不需要花費(fèi)精力去處理例如注冊(cè)驅(qū)動(dòng)、創(chuàng)建connection、創(chuàng)建statement、手動(dòng)設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過程代碼,本文將作為最終篇為大家介紹MyBatis的使用
    2022-08-08
  • Java輸入輸出流復(fù)制文件所用時(shí)間對(duì)比

    Java輸入輸出流復(fù)制文件所用時(shí)間對(duì)比

    這篇文章主要介紹了Java輸入輸出流復(fù)制文件所用時(shí)間對(duì)比的相關(guān)資料,非常不錯(cuò),具有參考解決價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Java中Process類的使用與注意事項(xiàng)說明

    Java中Process類的使用與注意事項(xiàng)說明

    這篇文章主要介紹了Java中Process類的使用與注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot 之jpa高級(jí)查詢操作

    springboot 之jpa高級(jí)查詢操作

    這篇文章主要介紹了springboot 之jpa高級(jí)查詢操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • JDK8的lambda方式List轉(zhuǎn)Map的操作方法

    JDK8的lambda方式List轉(zhuǎn)Map的操作方法

    account是一個(gè)返回本身的lambda表達(dá)式,其實(shí)還可以使用Function接口中的一個(gè)默認(rèn)方法代替,使整個(gè)方法更簡潔優(yōu)雅,這篇文章主要介紹了JDK8的lambda方式List轉(zhuǎn)Map,需要的朋友可以參考下
    2022-07-07

最新評(píng)論