《大話資料結構》第9章 排序 9.3 冒泡排序(下)_大話資料結構

來源:互聯網
上載者:User
9.3.2 冒泡排序演算法         我們來看看正宗的冒泡演算法,有沒有什麼改進的地方。
/* 對順序表L作冒泡排序 */void BubbleSort(SqList *L){  int i,j; for(i=1;i<L->length;i++) {  for(j=L->length-1;j>=i;j--)   /* 注意j是從後往前迴圈 */  {   if(L->r[j]>L->r[j+1])  /* 若前者大於後者(注意這裡與上一演算法差異)*/   {     swap(L,j,j+1);  /* 交換L->r[j]與L->r[j+1]的值 */   }  } }}

   依然假設我們待排序的關鍵字序列是{9,1,5,8,3,7,4,6,2},當i=1時,變數j由8反向迴圈到1,逐個比較,將較小值交換前面,直到最後找到最小值放置在了第1的位置。如圖9-5-3,當i=1,j=8時,我們發現6>2,因此交換了它們的位置,j=7時,4>2,所以交換……直到j=2時,因為1<2,所在不交換。j=1時,9>1,交換,最終得到最小值1放置第一的位置。事實上,在不斷迴圈的過程中,除了將關鍵字1放到第一的位置,我們還將關鍵字2從第九位置提到到了第三的位置,顯然這一演算法比前面的要有進步,在上十萬條資料的排序過程中,這種差異會體現出來。圖中較小的數字如同氣泡般慢慢浮到上面,因此就將此演算法命名為冒泡演算法。


 
        當i=2時,變數j由8反向迴圈到2,逐個比較,在將關鍵字2交換到第二位置的同時,也將關鍵字4和3有所提升。
 

 

        後面的數字變換很簡單,這裡就不在贅述了。


9.3.3 冒泡排序最佳化
        這樣的冒泡程式是否還可以最佳化呢。答案是肯定的。試想一下,如果我們待排序的序列是{2,1,3,4,5,6,7,8,9},也就是說,除了第一和第二的關鍵字需要交換外,別的都已經是正常的順序。當i=1時,交換了2和1,此時序列已經有序,但是演算法仍然不依不饒的將i=2到9,以及每個迴圈中的j迴圈都執行了一遍,儘管並沒有交換資料,但是之後的大量比較還是大大的多餘了。

 

 

        當i=2時,我們已經對9與8,8與7,……,3與2作了比較,沒有任何資料交換,這就說明此序列已經有序,不需要再繼續後面的迴圈判斷工作了。為了實現這個想法,我們需要改進一下代碼,增加一個標記變數flag,來實現這一演算法的改進。

/* 對順序表L作改進冒泡演算法 */void BubbleSort2(SqList *L){  int i,j; Status flag=TRUE;     /* flag用來作為標記 */ for(i=1;i<L->length && flag;i++)  /*若flag為true則有過資料交換,否則退出迴圈*/ {  flag=FALSE;     /* 初始為false */  for(j=L->length-1;j>=i;j--)  {   if(L->r[j]>L->r[j+1])   {     swap(L,j,j+1);  /* 交換L->r[j]與L->r[j+1]的值 */     flag=TRUE;   /* 如果有資料交換,則flag為true */   }  } }}

        代碼改動的關鍵就是在i變數的for迴圈中,增加了對flag是否為true的判斷。經過這樣的改進,冒泡排序在效能上就有了一些提升,可以避免因已經有序的情況下的無意義迴圈判斷。


9.3.4 冒泡排序複雜度分析
        分析一下它的時間複雜度。當最好的情況,也就是要排序的表本身就是有序的,那麼我們比較次數,根據最後改進的代碼,可以推斷出就是n-1次的比較,沒有資料交換,時間複雜度為O(n)。當最壞的情況,即待排序表是逆序的況,此時需要比較 次,並作等數量級的記錄移動。因此,總的時間複雜度為O(n2)。

出處:http://www.cnblogs.com/cj723/archive/2011/04/15/2016689.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.