天天看點

C程式數組算法 — 冒泡法排序【前冒 || 後冒】

第一種寫法(前冒泡):

/*  C程式數組算法 — 冒泡法排序
*   此例子按照 大 -> 小 排序
*   原理:兩兩相比較,然後進行大小對調   
*   比較次數: n^2 次
*   說明:冒泡排序是相對穩定的排序算法,當待排序的列有序時,效果最好!
*   時間:2020年7月12日 21:59:22
*/
#include<stdio.h>
int main()
{
    int a[10] = {1,3,5,7,9,2,4,6,8,10}; 
    int i,j,temp;             // i和j表示下标的 temp 交換時存放臨時的值
    for(i = 0;i<9;i++) //外層循環 比較n-1次
    {
        for(j = 0;j<9-i;j++)    //内層循環 比較n-1-i次 【i指的是排好了的】
        {
           if(a[j] < a[j+1])       //前一個元素和後一個元素對比
           {
           temp = a[j];             //開始交換前後元素
           a[j] = a[j+1];
           a[j+1] = temp;         //交換結束
           }
        }
    }
        
      for(i = 0;i<10;i++)//交換好了--- 列印
      {
      printf("%d\n",a[i]);
      }

return 0;
}      

第二種寫法(後冒泡):

/*  C程式數組算法 — 冒泡法排序
*   此例子按照 大 -> 小 排序
*   原理:兩兩相比較,然後進行大小對調   
*   比較次數: n^2 次
*   說明:冒泡排序是相對穩定的排序算法,當待排序的列有序時,效果最好!
*   時間:2020年7月12日 21:59:22
*/
#include<stdio.h>
int main()
{
    int a[10] = {1,3,5,7,9,2,4,6,8,10}; 
    int i,j,temp;             // i和j表示下标的 temp 交換時存放臨時的值
    for(i = 0;i<9;i++) //外層循環 比較n-1次
    {
        for(j = 9;j>i;j--)    //内層循環 說白了就是要比較n-i-1次,這裡的j = n-1(9),j<i ,此時的i是會遞減1 的 就相等"n-i-1"中的 "-i",那麼"n-i-1"中的 "-1" 就是j了。  
        {
           if(a[j] > a[j-1])       //後一個元素和前一個元素對比
           {
           temp = a[j-1];             //開始交換前後元素
           a[j-1] = a[j];
           a[j] = temp;         //交換結束
           }
        }
    }
        
      for(i = 0;i<10;i++)//交換好了--- 列印
      {
      printf("%d\n",a[i]);
      }

return 0;
}      

    總結前冒和後冒的公式:

前冒:for(i = 0;i < n-1;i++)

{

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

{

...交換語句...

}

}

後冒:for(i = 0;i < n-1;i++)

{

for(j = n - 1;j > i;j--)

{

...交換語句...

}

}