冒泡排序算法

1.什么是冒泡排序算法?

將一組元素兩兩相比較,直至該組元素順序?yàn)橛尚〉酱蟆?/p>

2.冒泡排序算法原理:

(1)從首位開始徙邻,比較相鄰的元素,如果第一個(gè)元素大于第二個(gè)元素畸裳,就交換兩者位置缰犁,直至結(jié)尾的最后一對。
(2)經(jīng)過(1)的動(dòng)作怖糊,此刻參與比較的元素中最大的一個(gè)排在了末尾帅容。
(3)將上述動(dòng)作中最后一位元素之前的元素再次進(jìn)行(1)(2)步驟,當(dāng)沒有一對元素再需要排序就結(jié)束(1)(2)(3)步驟伍伤。

3.簡單的事例:

首先定義一個(gè)數(shù)組:int a[6]={3,6,5,2,8,4};
按照冒泡排序的原理:
第一趟排序:

          int exam;
          if(a[0]>a[1]){
                 exam=a[0];
                  a[0]=a[1];
                  a[1]=exam;}//第一位和第二位排序并徘;

           if(a[1]>a[2]){
                 exam=a[1];
                  a[1]=a[2];
                  a[2]=exam;}//第二位和第三位排序;

          if(a[2]>a[3]){
                 exam=a[2];
                  a[2]=a[3];
                  a[3]=exam;}//第三位和第四位排序扰魂;
          if(a[3]>a[4]){
                 exam=a[3];
                  a[3]=a[4];
                  a[4]=exam;}//第四位和第五位排序麦乞;

          if(a[4]>a[5]){
                 exam=a[4];
                  a[4]=a[5];
                  a[5]=exam;}//第五位和第六位排序;

結(jié)果:六個(gè)元素比了五次阅爽,數(shù)組結(jié)果a[6]={3,5,2,6,4,8};

第二趟排序:第一次排序的最大值不再參與路幸,此刻五個(gè)元素進(jìn)行比較。

           int exam;
          if(a[0]>a[1]){
                 exam=a[0];
                  a[0]=a[1];
                  a[1]=exam;}//第一位和第二位排序付翁;

           if(a[1]>a[2]){
                 exam=a[1];
                  a[1]=a[2];
                  a[2]=exam;}//第二位和第三位排序简肴;

          if(a[2]>a[3]){
                 exam=a[2];
                  a[2]=a[3];
                  a[3]=exam;}//第三位和第四位排序;
          if(a[3]>a[4]){
                 exam=a[3];
                  a[3]=a[4];
                  a[4]=exam;}//第四位和第五位排序百侧;

結(jié)果:五個(gè)元素比了四次砰识,數(shù)組a[6]={3,2,5,4,6,8};
同理可知接下來還需要3趟排序能扒,所以當(dāng)假設(shè)數(shù)組元素有n個(gè)時(shí),需要(n-1)趟排序辫狼,第i趟排序中元素兩兩比較的次數(shù)為(n-i),(i>=1)初斑。

4.核心代碼:

(1)雙重循環(huán)實(shí)現(xiàn)即:

                   for(int i=0;i<n-1;i++)
                   {         
                         for(int j=0;j<n-i-1;j++)//第i趟排序需要兩兩比較的次數(shù)。
                                   {
                                          if(a[j]>a[j+1])
                                               {
                                                     exam=a[j];
                                                      a[j]=a[j+1];
                                                       a[j+1]=exam;
                                                 }
                                       }
                         }

(2)遞歸實(shí)現(xiàn)即:

    void sort(int i,int n,int a[]){  //i初值為0膨处,n代表元素的個(gè)數(shù) 
          if(i==(n-1)){
                for(int o=0;o<n;o++);
                   cout<<a[o]<<" ";}
          else
         {
               for(int j=0 ;j<n-1;j++){
                    if(a[j]>a[j+1]){
                            exam=a[j];
                            a[j]=a[j+1];
                            a[j+1]=exam;
                      }
            }       
       }
    
    sort(i,n-1,a);  

}

5.優(yōu)化算法

假設(shè)數(shù)組a[6]={7,2,3,4,5,6};
第一趟排序后將最大數(shù)據(jù)排到了最后见秤;
第二趟排序的時(shí)候會(huì)發(fā)現(xiàn)沒有出現(xiàn)相鄰兩數(shù)據(jù)交換的情況,接下來第三趟至第五趟都沒出現(xiàn)真椿;
所以由此可得出鹃答,當(dāng)某趟排序不會(huì)發(fā)生兩兩數(shù)據(jù)進(jìn)行交換時(shí),該組數(shù)據(jù)的排序結(jié)束突硝。
優(yōu)化算法如下:

                bool t=false;
              for(int i=0;i<n-1;i++)
                {      
                   for(int j=0;j<n-i-1;j++)
                       {
                            f=false;
                            if(a[j]>a[j+1])
                                 {
                                    exam=a[j];
                                   a[j]=a[j+1];
                                   a[j+1]=exam;
                                     f=true;
                                 }
                         }
                           if(f==false)break;
                  }

6.應(yīng)用

題目:設(shè)有n個(gè)正整數(shù)测摔,將他們連接成一排,組成一個(gè)最大的多位整數(shù)解恰。

如:n=3時(shí)锋八,3個(gè)整數(shù)13,312,343,連成的最大整數(shù)為34331213。

如:n=4時(shí),4個(gè)整數(shù)7,13,4,246連接成的最大整數(shù)為7424613护盈。

輸入描述:

有多組測試樣例挟纱,每組測試樣例包含兩行,第一行為一個(gè)整數(shù)N(N<=100)黄琼,第二行包含N個(gè)數(shù)(每個(gè)數(shù)不超過1000樊销,空格分開)。

輸出描述:

每組數(shù)據(jù)輸出一個(gè)表示最大的整數(shù)脏款。

解答:

 # include <iostream>
 # include <vector>
 using namespace std;
 int main(){
vector <string> array;
int n;
cin>>n;
for (int i=0;i<n;i++){
    string num;
    cin>>num;
    array.push_back(num);   
}
for(int m=0;m<n-1;m++){
    int g=0;
    for(int j=0;j<n-m-1;j++){
            string x;
    x=array[j];
    string s1,s2;
    s1=array[j]+array[j+1];
    s2=array[j+1]+array[j];
    if(s1<s2){
        array[j]=array[j+1];
        array[j+1]=x;
        g=1; 
    }
}
if(g==0)break;
    }
for(int y=0;y<n;y++){
    cout<<array[y];
}
return 0;
 } 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末围苫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撤师,更是在濱河造成了極大的恐慌剂府,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃盾,死亡現(xiàn)場離奇詭異腺占,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)痒谴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門衰伯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人积蔚,你說我怎么就攤上這事意鲸。” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵怎顾,是天一觀的道長读慎。 經(jīng)常有香客問我,道長槐雾,這世上最難降的妖魔是什么夭委? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮募强,結(jié)果婚禮上株灸,老公的妹妹穿的比我還像新娘。我一直安慰自己擎值,他們只是感情好蚂且,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幅恋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泵肄。 梳的紋絲不亂的頭發(fā)上捆交,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音腐巢,去河邊找鬼品追。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冯丙,可吹牛的內(nèi)容都是我干的肉瓦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼胃惜,長吁一口氣:“原來是場噩夢啊……” “哼泞莉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起船殉,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鲫趁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后利虫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挨厚,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年糠惫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疫剃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硼讽,死狀恐怖巢价,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤蹄溉,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布咨油,位于F島的核電站,受9級特大地震影響柒爵,放射性物質(zhì)發(fā)生泄漏役电。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一棉胀、第九天 我趴在偏房一處隱蔽的房頂上張望法瑟。 院中可真熱鬧,春花似錦唁奢、人聲如沸霎挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酥夭。三九已至,卻和暖如春脊奋,著一層夾襖步出監(jiān)牢的瞬間熬北,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工诚隙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讶隐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓久又,卻偏偏與公主長得像巫延,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子地消,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • “簡單不先于復(fù)雜炉峰,而是在復(fù)雜之后.” —— Alan Perlis 序言 當(dāng)我們第一次數(shù)組排序的時(shí)候,通常都會(huì)介紹...
    神經(jīng)騷棟閱讀 2,154評論 15 30
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序脉执,而外部排序是因排序的數(shù)據(jù)很大讲冠,一次不能容納全部...
    蟻前閱讀 5,170評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序适瓦,而外部排序是因排序的數(shù)據(jù)很大竿开,一次不能容納全部...
    每天刷兩次牙閱讀 3,729評論 0 15
  • 文 | 莫若吻 一、簡介 冒泡排序(Bubble Sort)玻熙,是一種計(jì)算機(jī)科學(xué)領(lǐng)域的較簡單的排序算法否彩。這個(gè)算法的名...
    Promise_Sun閱讀 918評論 3 15
  • 卅載風(fēng)雨學(xué)堂, 半世舊舍高臺嗦随, 廿余輩子孫興衰列荔, 回首同拜一古槐敬尺。 今吊杜氏太祖, 仍念詩圣傳代贴浙, 定邦一方家四海...
    墨度閱讀 263評論 0 8