排序 氣泡排序

2021-09-10 14:18:02 字數 2332 閱讀 2381

氣泡排序是最為常用的一種排序方法。他是一類具有「交換」性質的排序方法。氣泡排序的基本思想可描述如下:

將序列的第1個元素與第2個元素進行比較若前者大於後者,則將第1個元素與第2個元素進行位置交換,否則不交換。

再將第2個元素與第3個元素進行比較,同樣若前者大於後者,則將第2個元素與第3個元素進行位置交換,否則不交換。

依此類推,直到將第n-1個元素與第n個元素進行比較為止。

這個過程稱為第1趟氣泡排序。經過第1趟氣泡排序後,將長度為n的序列中的最大值置於了序列的尾部,即第n個位置上。

然後再對剩下的n-1個元素作同樣的操作,這叫做第2趟氣泡排序。經過第2趟的氣泡排序,將剩下的n-1個元素中最大的元素置於了序列的n-1的位置上。

如此進行下去,當執行完第n-1趟的氣泡排序後,就可以將序列中剩下的2個元素中最大的元素置於了序列的第2個位置上。第1個位置上的元素就是該序列中最小的元素。這樣氣泡排序完成

元素序列的氣泡排序的過程如下:

初始狀態:

↓比較6次

第1趟排序:

↓比較5次

第2趟排序:

↓比較4次

第3趟排序:

↓比較3次

第4趟排序:

↓比較2次

第5趟排序:

↓比較1次

第6趟排序:

如圖所示,乙個包含了n個元素的序列要進行n-1趟的氣泡排序,第i趟氣泡排序將第1–n-i+1個元素中最大的元素交換到第n-i+1的位置上。因此第n-1趟氣泡排序就是將1–2個元素中最大的元素交換到第2個位置上。因此,這種排序的方法就是通過序列中鄰接元素之間的交換,使較小的元素逐步從序列的後端移到序列的前端,使較大的元素從序列的前端移到後端。這就像水底的氣泡不斷向上「冒」一樣,因此形象地稱這種排序方法為「氣泡排序」法。

氣泡排序的演算法描述如下:

void sort(keytype k,int n)

}}}

該演算法仍然只對資料進行從小到大的排序。k的0號單元不存放內容,因此也可以省略中間變數tmp,而用k[0]作為資料交換到臨時緩衝區

但是上述的冒泡演算法不是乙個優秀的氣泡排序演算法。因為上述氣泡排序的過程中,從第4趟開始,序列本身就沒有再發生變化,只是相鄰元素的比較,並沒有發生相鄰元素的交換。因此,從第4趟排序操作往下的比較運算其實都可以不再進行。如果某一趟排序過程中只有元素之間的比較操作,而沒有發生元素的位置交換,那就說明到本趟排序為止,序列中的元素已經有序,因此不需要再進行下一趟排序,排序可以提前結束。可以對原來的氣泡排序法進行改造,使其排序效率更高。

在演算法中可以設定乙個標識變數flag。規定當flag=1時,說明本趟排序中仍有元素交換的過程,因此還需進行下一趟的比較。當flag=0時,說明本趟排序中已經沒有了元素的交換,只有元素的比較,因此表明該序列已經按值有序,排序可以停止

改進後的氣泡排序演算法如下:

void sort(keytype k,int n)

}}}

使用改進後的演算法可以減少排序時的比較次數,提高氣泡排序的效率

【例項】

編寫乙個c程式,實現資料序列的氣泡排序,要求從大到小,並輸出排序後的數列元素。

【分析】

該資料序列包含10個元素,因此可以將它放到乙個含有11個單元的陣列中,第0號元素作為存放每次待插入的元素k[i]的空間,在這裡不能直接照搬前面給出的演算法,要將前面實現從小到大排列的演算法加以修改,從而達到從大到小排列的目的。

#includevoid sort(int k,int n)//氣泡排序 

}}}

main()

; //初始化序列,a[0]可任意置數

printf("原序列為:\n");//顯示原序列之中的元素

for(i=1;i<=10;i++)

printf("%d ",a[i]);

sort(a,10);//執行氣泡排序

printf("\n排序後的序列為:\n");

for(i=1;i<=10;i++)

printf("%d ",a[i]); //輸出排序後結果

return 0;

}

氣泡排序 排序 氣泡排序

既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...

氣泡排序 氣泡排序法

冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...

排序 氣泡排序

氣泡排序 氣泡排序 bubble sort 是一種 電腦科學 領域的較簡單的 排序演算法 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小...