算法(一)之排序算法(一)——冒泡排序(BubbleSort)

冒泡排序是八大排序算法之一。其排序原理是每次都對(duì)相鄰的兩個(gè)數(shù)進(jìn)行比較,如果前面一個(gè)數(shù)大于后面一個(gè)數(shù)警绩,那就交換兩個(gè)數(shù)的位置,這樣一直循環(huán)下來就可以把最大的找到放在最后面后室。

如現(xiàn)在有一組數(shù)據(jù):[3, 1, 8, 6, 2, 5, 9, 4, 7]

使用冒泡排序?qū)@組數(shù)據(jù)進(jìn)行排序岸霹,具體流程:

第一趟排序: 從前往后一次把相鄰的兩個(gè)數(shù)進(jìn)行比較贡避。

          3    1    8    6    2    5    9    4    7

(1) 把3和1進(jìn)行比較刮吧,3>1,把3和1交換位置

         1    3    8    6    2    5    9    4    7

(2) 把3和8進(jìn)行比較琉历,3<8,則不做任何事

        1    3    8    6    2    5    9    4    7

(3)把8和6進(jìn)行比較旗笔,8>6蝇恶,把8和6交換位置

        1    3    6    8    2    5    9    4    7

(4)把8和2進(jìn)行比較撮弧,8>2,把8和2交換位置

        1    3    6    2    8    5    9    4    7 

(5)把8和5進(jìn)行比較,8>5贸辈,把8和5交換位置

        1    3    6    2    5    8    9    4    7 

(6)把8和9進(jìn)行比較,8<9,則不做任何事

        1    3    6    2    5    8    9    4    7 

(7)把9和4進(jìn)行比較,9>4桩盲,把9和4交換位置

        1    3    6    2    5    8    4    9    7 

(8)把9和7進(jìn)行比較,9>7弊攘,把9和7交換位置

        1    3    6    2    5    8    4    7    9

第一趟排序下來襟交,我們發(fā)現(xiàn)已經(jīng)把最大值找到放在了最右邊捣域,那接下來我們只需要對(duì)前面8個(gè)數(shù)進(jìn)行排序就可以了

第二趟排序

        1    3    6    2    5    8    4    7    9

(1) 把1和3進(jìn)行比較焕梅,1<3卦洽,則不做任何事

        1    3    6    2    5    8    4    7    9

(2) 把3和6進(jìn)行比較,3<6,則不做任何事

        1    3    6    2    5    8    4    7    9

(3) 把6和2進(jìn)行比較蚤霞,6>2,把6和2交換位置

        1    3    2    6    5    8    4    7    9

(4) 把6和5進(jìn)行比較规肴,6>5拖刃,把6和5交換位置

        1    3    2    5    6    8    4    7    9

(5) 把6和8進(jìn)行比較兑牡,6<8兔簇,則不做任何事

        1    3    2    5    6    8    4    7    9

(6) 把8和4進(jìn)行比較硬耍,8>4经柴,把8和4交換位置

        1    3    2    5    6    4    8    7    9

(7) 把8和7進(jìn)行比較墩朦,8>7氓涣,把8和7交換位置

        1    3    2    5    6    4    7    8    9

經(jīng)過第二趟排序,我們是不是又把一個(gè)最大值找到了引润,就是8痒玩,而且我們發(fā)現(xiàn)我們的數(shù)據(jù)越來越接近要排序之后的效果了。

而且有的時(shí)候相鄰的兩個(gè)數(shù)是不是之前就已經(jīng)排好序了?就像第(5)步草讶,是不是不用做任何事情。這就是冒泡排序可以在原來的基礎(chǔ)上進(jìn)行優(yōu)化的地方坤溃。

而且我們的每趟排序要排序的次數(shù)都會(huì)比要排序數(shù)組的長(zhǎng)度少1個(gè)浇雹。就像第一趟有9個(gè)數(shù)要排屿讽,我們只排序了8次吠裆;第二趟有8個(gè)數(shù)要排,我們只排序了7次诵棵。那么經(jīng)過這樣不停的循環(huán)祝旷,我們是不是就可以得到最終結(jié)果了嘶窄。

現(xiàn)在直接上代碼

      public static void bubbleSort(int[] array){
          for(int i = array.length-1; i>0; i--){
              boolean flag = true;    //如果是true,就證明比較的兩個(gè)數(shù)據(jù)是有序的
              for(int j = 0; j<i; j++){
                  if(array[j]> array[j+1]){
                      int temp = array[j];
                      array[j] = array[j+1];
                      array[j+1] = temp;
                      flag = false;
                  }
              }
              if(flag){   //如果之前沒有發(fā)生過交換,那flag就還是true忠蝗,我們?cè)谶@里退出可以減少排序次數(shù)
                  break;
              }
          }
      }

冒泡排序應(yīng)用場(chǎng)景:

(1)數(shù)據(jù)量較小,在8個(gè)數(shù)以內(nèi)戒祠,數(shù)據(jù)量大的話冒泡排序的性能比較差速种。

(2)斗牛游戲、炸金花的紙牌排序(多關(guān)鍵字排序,需自己定義排序規(guī)則闸餐,使用對(duì)象的compareTo接口)。

小編總結(jié)舍沙,請(qǐng)指出不足拂铡!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斗锭,一起剝皮案震驚了整個(gè)濱河市岖是,隨后出現(xiàn)的幾起案子实苞,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陆错,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡音瓷,警方通過查閱死者的電腦和手機(jī)外莲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人声邦,你說我怎么就攤上這事『ゲ埽” “怎么了媳瞪?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵句葵,是天一觀的道長(zhǎng)乍丈。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么察蹲? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮叼屠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫂侍。我一直安慰自己荚坞,他們只是感情好颓影,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布诡挂。 她就那樣靜靜地躺著临谱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪城豁。 梳的紋絲不亂的頭發(fā)上抄课,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼抵拘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仑濒,可吹牛的內(nèi)容都是我干的墩瞳。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼般妙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碟渺,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤苫拍,失蹤者是張志新(化名)和其女友劉穎绒极,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垄提,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铡俐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年聪黎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稿饰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侣姆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捺宗,我是刑警寧澤蚜厉,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布昼牛,位于F島的核電站康聂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏伶椿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一游昼、第九天 我趴在偏房一處隱蔽的房頂上張望尝蠕。 院中可真熱鬧载庭,春花似錦、人聲如沸靖榕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽星压。三九已至鬼譬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間优质,已是汗流浹背巩螃。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工避乏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畏纲。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓盗胀,卻偏偏與公主長(zhǎng)得像锄贼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屑迂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350