1. 程式人生 > 其它 >氣泡排序(c語言)

氣泡排序(c語言)

技術標籤:排序演算法演算法排序演算法

氣泡排序演算法詳解:


1.氣泡排序簡介: 氣泡排序是交換排序演算法中的一個簡單演算法,是比較基礎的。 它的特點是每一趟排序能確定一個或多個關鍵字的最終位置。
2.氣泡排序原理介紹(假設按升序排序): 對於給定n個記錄,從第一個記錄開始依次對相鄰的兩個記錄進行比較,當前面的記錄大於後面的記錄時,交換位置,進行一輪比較和換位後,n個記錄的最大記錄將位於第n位,然後對前(n-1)個記錄進行第二輪比較;重複該過程,直到記錄剩下一個為止。
3.舉例說明:
例子1:
假設待排序序列為:6、5、4、3、2、1;
第一趟排序:5、4、3、2、1、6;
第二趟排序:4、3、2、1、5、6;
第三趟排序:3、2、1、4、5、6;
第四趟排序:2、1、3、4、5、6;
第五趟排序:1、2、3、4、5、6;
特點:
(1)一趟排序可以確定一個關鍵字的最終位置。
(2)共有6個元素,需要5趟排序。
例子2:
假設待排序序列為:8、12、20、10、18、24;
第一趟排序:8、12、10、18、20、24;
第二趟排序:8、10、12、18、20、24;
第三趟排序:8、10、12、18、20、24;
特點:
(1)一趟排序可以確定多個關鍵字的最終位置。
(2)共有6個元素,2趟排序即可完成排序。
(3)如果一趟排序沒有進行關鍵字的位置交換,則說明排序已完成。

總結:
(1)氣泡排序中,一趟排序可以確定多個關鍵字的最終位置。
(2)假設有n個關鍵字,則氣泡排序至多進行n-1趟排序。
(3)如果一趟排序沒有進行關鍵字的位置交換,則說明排序已完成。

4.程式碼實現:
程式碼說明:儲存關鍵字的陣列是從下標1(即a[1])開始儲存的,下標0用作交換兩個關鍵字的中間變數,即a[0]
帶註釋的:
#include<stdio.h>
int main()
{
	int a[7];//定義一個長度為六的陣列,從下標1開始儲存,a[0]用作中間變數 
	int i;  //作為迴圈變數 
	printf("請輸入六個整數,中間用空格隔開:\n");
	//此處是從下標為1的位置開始儲存這六個整數,a[0]用作中間變數 
for(i=1; i<=6; i++) { scanf("%d",&a[i]); } //下面是氣泡排序演算法部分 int m= 6-1; //m的值是待排序關鍵字的個數減一,即至多進行排序的趟數 int flag=1; //flag用來判斷某一趟排序中是否進行了關鍵字的位置交換 while(m>0 && flag==1) { flag = 0; //先把flag設為0,如果上一趟排序中沒有進行關鍵字的交換,則說明排序完成,終止迴圈。 for(i=1; i<=m; i++)//完成一次for迴圈,意味著完成了一趟排序 { if(a[i] > a[i+1]) { a[0] = a[i]; a[i] = a[i+1]; a[i+1] = a[0]; flag = 1;//如果此趟排序進行了關鍵字的交換,則把flag設為1,繼續進行下一趟迴圈 } } m--;//完成一趟排序後,最後一個元素的下標減一 } //排序完成輸出陣列 printf("氣泡排序後的結果為:"); for(i=1; i<=6; i++) { printf("%d ",a[i]); } }