第一種寫法(前冒泡):
/* 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--)
{
...交換語句...
}
}