小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

冒泡排序各層循環(huán)的含義

 昵稱13511140 2014-02-13


 

1.1第一層循環(huán)

 

 通常為

for (int i=0;i

For(int i=1;i

 

當(dāng)然,如果你喜歡,你甚至可以定義i初始值為3、為4、為100等。不過我相信,沒人會(huì)那么無聊的。

 

不過這卻揭示了第一層循環(huán)與i的初始值無關(guān),而只與循環(huán)了多少次有關(guān)。

 

因此,冒泡排序第一層循環(huán)的含義為:需要遍歷多次數(shù)組,才能將這個(gè)數(shù)組排好序。

 

 

那到底需要遍歷多少次數(shù)組,才能排好序呢?

 

第一次遍歷,確定一個(gè)最值。

第二次遍歷,確定第二個(gè)最值。

。。。

num-1次遍歷,確定第num-1最值。  Num-1個(gè)最值都確定了,自然整個(gè)數(shù)組也就排好序了。  

 

因此,第一層循環(huán)含義為:需要遍歷num-1次數(shù)組,才能將數(shù)組排好序。

 

1.2第二層循環(huán)

通常定義為int j;  j是一個(gè)與i相關(guān)的變量,第2層循環(huán)需要用到第一層的i的值。

 

那第二層循環(huán)要解決的問題是什么?

 

不好想的話,我們反過來想,在第二層循環(huán)時(shí),我們還要對(duì)已經(jīng)排好序的位置進(jìn)行遍歷嗎?

當(dāng)然不需要作此無用功,在第二層遍歷中,我們只需對(duì)未排好序的那些待排位置進(jìn)行遍歷即可,而首先,我們必須知道,哪些元素是已經(jīng)拍過序的,哪些元素是待排序的。

 

所以,我們第二層循環(huán)要解決的問題便是:待排序區(qū)域的起始和結(jié)尾位置。

 

而要解決這個(gè)問題,

首先,第一個(gè)要解決的便是:在進(jìn)行這個(gè)循環(huán)時(shí),數(shù)組已經(jīng)排好了幾個(gè)值。

 

其次,第二個(gè)要解決的便是:在數(shù)組中,待排序區(qū)域的其實(shí)和末尾位置分別是什么。

 

第一個(gè)要解決的問題與第一層循環(huán)已經(jīng)進(jìn)行了多少次有關(guān)。

第二個(gè)要解決的問題則與排序時(shí)遍歷的方向有關(guān)。

 

 

 

冒泡排序算法

2.1  i=0

 

  1. void BubbleSortBtoS(int A[],int num)  // 從數(shù)組末尾向數(shù)組開始遍歷  
  2.  
  3.   
  4.     int temp=0;  
  5.     for (int i=0;i
  6.      
  7.   
  8.         for (int j=num-1;j>i;j--)    //  待排的數(shù)據(jù)為i,i+1,...num-1    此處判斷條件為j>i  
  9.          
  10.             if (A[j]
  11.              
  12.                 temp=A[j];  
  13.                 A[j]=A[j-1];  
  14.                 A[j-1]=temp;  
  15.              
  16.          
  17.      
  18.   
  19.  

 


  1. void BubbleSortStoB(int A[],int num)  // 從數(shù)組開始向數(shù)組末尾遍歷  
  2.  
  3.   
  4.     int temp=0;  
  5.     for (int i=0;i
  6.      
  7.   
  8.         for (int j=0;j// 待排的數(shù)據(jù)為0,1,2,...,n-i-1      此處判斷條件為j  
  9.          
  10.             if (A[j]>A[j+1])  
  11.              
  12.                 temp=A[j];  
  13.                 A[j]=A[j+1];  
  14.                 A[j+1]=temp;  
  15.              
  16.          
  17.      
  18.   
  19.  


 

2.2  i=1

好吧,總有人喜歡從i=1開始作為第一層循環(huán)的起始值,這是習(xí)慣問題,因此我們也分析下從1開始時(shí)的程序。

 

  1. void BubbleSortBtoS1(int A[],int num)  // 從數(shù)組末尾向數(shù)組開始遍歷  
  2.  
  3.   
  4.     int temp=0;  
  5.     for (int i=1;i
  6.      
  7.   
  8.         for (int j=num-1;j>=i;j--)    //  待排的數(shù)據(jù)為i-1,i,i+1,...num-1   此處為j>=i  
  9.          
  10.             if (A[j]
  11.              
  12.                 temp=A[j];  
  13.                 A[j]=A[j-1];  
  14.                 A[j-1]=temp;  
  15.              
  16.          
  17.      
  18.   
  19.  

 

 

  1. void BubbleSortStoB1(int A[],int num)  // 從數(shù)組開始向數(shù)組末尾遍歷  
  2.  
  3.   
  4.     int temp=0;  
  5.     for (int i=1;i
  6.      
  7.   
  8.         for (int j=0;j<=num-i-1;j++)     // 待排的數(shù)據(jù)為0,1,2,...,n-i-1,n-i    此處為j<=num-i-1  
  9.          
  10.             if (A[j]>A[j+1])  
  11.              
  12.                 temp=A[j];  
  13.                 A[j]=A[j+1];  
  14.                 A[j+1]=temp;  
  15.              
  16.          
  17.      
  18.   
  19.  


 

冒泡算法的小改進(jìn)

3.1  簡化從前往后遍歷


 

  1. void BubbleSortStoB_Tail(int A[],int num)  // tail參數(shù)記錄末尾位置  
  2.  
  3.   
  4.     int temp=0;  
  5.     int tail=num-1;  
  6.     for (int i=0;i
  7.      
  8.   
  9.         for (int j=0;j// 待排的數(shù)據(jù)為0,1,2,...,tail      實(shí)則tail==num-i-1  
  10.          
  11.             if (A[j]>A[j+1])  
  12.              
  13.                 temp=A[j];  
  14.                 A[j]=A[j+1];  
  15.                 A[j+1]=temp;  
  16.              
  17.          
  18.   
  19.         tail--;  
  20.      
  21.   
  22.  


 

3.2 增設(shè)是否有序標(biāo)志

  1. void BubbleSortBtoS_Modify(int A[],int num)  // 從數(shù)組末尾向數(shù)組開始遍歷  
  2.  
  3.   
  4.     bool bSwap=false 
  5.     int temp=0;  
  6.     for (int i=0;i
  7.      
  8.   
  9.         for (int j=num-1;j>i;j--)    //  待排的數(shù)據(jù)為i,i+1,...num-1    此處判斷條件為j>i  
  10.          
  11.             if (A[j]
  12.              
  13.                 bSwap=true 
  14.                 temp=A[j];  
  15.                 A[j]=A[j-1];  
  16.                 A[j-1]=temp;  
  17.              
  18.          
  19.   
  20.         if (!bSwap)               //   設(shè)置是否交換標(biāo)志以提前退出  
  21.          
  22.             break 
  23.          
  24.      
  25.   
  26.  


 

 雞尾酒算法

 

 

 

 

  1. void CockTail(int A[],int num)  
  2.  
  3.   
  4.     int tail=num-1;  
  5.   
  6.     int temp=0;  
  7.   
  8.     for (int i=0;i
  9.      
  10.   
  11.         for (int j=tail;j>i;j--)  
  12.          
  13.             if (A[j]
  14.              
  15.                 temp=A[j];  
  16.                 A[j]=A[j-1];  
  17.                 A[j-1]=temp;  
  18.   
  19.              
  20.          
  21.   
  22.         i++;  
  23.   
  24.   
  25.         for (int j=i;j
  26.          
  27.             if (A[j]>A[j+1])  
  28.              
  29.                 temp=A[j];  
  30.                 A[j]=A[j+1];  
  31.                 A[j+1]=temp;  
  32.              
  33.          
  34.         tail--;  
  35.      
  36.   
  37. }  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多