冒泡排序(Bubble Sort) 一種電腦科學領域的較簡單的排序演算法。它重覆地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從從Z到A)錯誤就把他們交換過來。走訪元素的工作是重覆地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。 這個演算法的名字由來是因為越 ...
冒泡排序(Bubble Sort)
一種電腦科學領域的較簡單的排序演算法。它重覆地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從從Z到A)錯誤就把他們交換過來。走訪元素的工作是重覆地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。
這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。
基本思路
每次將相鄰的兩個數比較,將較小(或較大)的調到前面。重覆這個步驟,最終將最大(或最小)的數排在最後。
演算法描述
1.比較相鄰兩個數據,如果第一個比第二個大,就交換兩個數
2.對每一個相鄰的數做同樣1的工作,這樣從開始一隊到結尾一隊在最後的數就是最大的數。
3.針對所有元素上面的操作,除了最後一個。
4.重覆1~3步驟,知道順序完成。
演算法實現
(這裡以從小到大排序為例)
# include<stdio.h>
int main(void)
{
int i, j, t, n;
int a[100];
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
scanf("%d",&a[i]); //遍曆數組
for(i=0;i<n-1;i++) //進行n-1趟比較
{
for(j=0;j<n-1-i;j++)//每一趟進行n-1-i次比較
{
if(a[j]>a[j+1]) //相鄰兩個數比較
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
演算法分析
冒泡排序法是穩定的,因為當兩個數相等時,兩個數不用交換,不會改變兩個數的相對位置