白話経典アルゴリズムシリーズの一つの泡の順序付けの3種類の実現.

4778 ワード

ブロガー人http://blog.csdn.net/morewindows/article/details/6657829
 
 
バブルソートは、小さいものから大きいものへのソートの例として、非常に容易に理解され、実装される.
配列長をNとする.
1.隣接する前後の2つのデータを比較し、前のデータが後のデータより大きい場合、2つのデータを交換する.
2.このように配列の0番目のデータをN-1番目のデータに1回遍歴すると、最大のデータは配列のN-1番目の位置に「沈」する.
3.N=N-1で、Nが0でない場合は前の2つのステップを繰り返し、そうでない場合はソートが完了します.
 
定義に従ってコードを簡単に書きます.
[cpp] view plain copy print ?
//泡立ち順1  
  • void BubbleSort1(int a[], int n)  

  • {  
  •        int i, j;  

  •        for (i = 0; i < n; i++)  
  •               for (j = 1; j < n - i; j++)  

  •                      if (a[j - 1] > a[j])  
  •                             Swap(a[j - 1], a[j]);  

  • }  
    //    1
    void BubbleSort1(int a[], int n)
    {
           int i, j;
           for (i = 0; i < n; i++)
                  for (j = 1; j < n - i; j++)
                         if (a[j - 1] > a[j])
                                Swap(a[j - 1], a[j]);
    }
    

    次に最適化し、フラグを設定します.このフラグが交換された場合はtrue、そうでない場合はfalseです.明らかに交換が発生しなかった場合は、ソートが完了したことを示します.
    [cpp] view plain copy print ?
      
     
     
    [cpp] view plain copy print ?
    1. // 2   
    2. void BubbleSort2(int a[], int n)  
    3. {  
    4.        int j, k;  
    5.        bool flag;  
    6.   
    7.        k = n;  
    8.        flag = true;  
    9.        while (flag)  
    10.        {  
    11.               flag = false;  
    12.               for (j = 1; j < k; j++)  
    13.                      if (a[j - 1] > a[j])  
    14.                      {  
    15.                             Swap(a[j - 1], a[j]);  
    16.                             flag = true;  
    17.                      }  
    18.               k--;  
    19.        }  
    20. }  
    //    2
    void BubbleSort2(int a[], int n)
    {
           int j, k;
           bool flag;
    
           k = n;
           flag = true;
           while (flag)
           {
                  flag = false;
                  for (j = 1; j < k; j++)
                         if (a[j - 1] > a[j])
                         {
                                Swap(a[j - 1], a[j]);
                                flag = true;
                         }
                  k--;
           }
    }
    

    さらに します.100 の の があって、 の10 だけが で、 ろの90 はすでに が い、 の10 より きい 、 の 、 に が した は ず10 であり、この の のデータは ず が っているので、この を して、2 は の からこの まで すればよい.
    [cpp] view plain copy print ?
    // ち 3  
  • void BubbleSort3(int a[], int n)  

  • {  
  •     int j, k;  

  •     int flag;  
  •       

  •     flag = n;  
  •     while (flag > 0)  

  •     {  
  •         k = flag;  

  •         flag = 0;  
  •         for (j = 1; j < k; j++)  

  •             if (a[j - 1] > a[j])  
  •             {  

  •                 Swap(a[j - 1], a[j]);  
  •                 flag = j;  

  •             }  
  •     }  

  • }  
    //    3
    void BubbleSort3(int a[], int n)
    {
    	int j, k;
    	int flag;
    	
    	flag = n;
    	while (flag > 0)
    	{
    		k = flag;
    		flag = 0;
    		for (j = 1; j < k; j++)
    			if (a[j - 1] > a[j])
    			{
    				Swap(a[j - 1], a[j]);
    				flag = j;
    			}
    	}
    }

    バブルソートは の いソート であり、データ が さい に することができる.データ が きい は、 のソート を いることが ましい.