什麼是氣泡排序(為了更清楚地說明區域性冒泡)
對於一組無序資料,兩兩相鄰比較,若反序則交換,直到沒有反序為止。比如有n個資料,我們需要進行k(
0 )趟氣泡排序
,最好的情況是正序,我們只需要進行
1趟氣泡排序,最壞的情況是逆序,我們需要進行
n-1趟氣泡排序。
什麼是區域性冒泡
對於n個無序資料,我們在進行一趟氣泡排序時,如果第
k個資料和第
k+1個資料逆序,那麼對第
k+1個資料進行一趟向前的氣泡排序,使其移動到合適的位置,也就是說讓前面
k+1個資料調節為正序。因為這種冒泡法只對前
k+1個資料冒泡處理,所以我們稱它為——區域性冒泡。
/*
摘要:使用區域性冒泡法,對無序資料0, 11, 12, 5,6, 13, 8, 9, 14, 7, 10 進行公升序排序
完成日期:2012-7-12 23:29
版本: 1.1
*/#include #define n 11//排序的資料量
void partbubblesort(int a,int n);
void printlist(int a, int n);
int main()
; int n = 11;
printf("initial array:\n");
printlist(a, n);
partbubblesort(a, n);
printf("after part bubble sort:\n");
printlist(a, n);}/*
* 功能:排序(遞增序列)
* 輸入:資料組node a,陣列維數n
*/void partbubblesort(int a,int n)
//end of while
}//end of if
}//end of for}/*
功能:輸出陣列
輸入:int list, int n
輸出:無
*/void printlist(int list, int n)
printf("\n");
}
區域性氣泡排序演算法至少需進行1 趟掃瞄, 至多需進行n- 1 趟掃瞄(其中只有一趟掃瞄是全域性的, 其餘趟掃瞄都是區域性掃瞄, 掃瞄範圍相對小得多。即在待排序資料初始有序( 正序) 情況下, 關鍵字的比較次數為n- 1, 資料的移動次數為0; 在待排序資料初始逆序的情況下, 關鍵字的比較次數為n ( n- 1) / 2, 最壞情況下, 每一次比較均會發生資料的交換, 即移動次數為3 n( n- 1) / 2。顯然區域性氣泡排序與氣泡排序演算法具有相同的時間複雜度, 並且在正序和逆序的情況下, 所需的關鍵字的比較次數和移動次數完全相同。
效能比較
因為漸進的複雜度分析方法不能區分時間複雜度相同的演算法,所以我們需要進一步測試。
注:測試所用資料均為隨機產生的32 位非負整數,由於測試程式的統計量不是執行時間, 所以表1 中的測試結果不依賴於具體計算機的軟、硬體等環境因素, 而僅與演算法有關。
由上圖可見,區域性冒泡法的平局移動次數等於冒泡法,但是區域性冒泡法的平局比較次數小於冒泡法。
氣泡排序(包括區域性氣泡排序)
氣泡排序 bubblesort 的基本概念 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第...
氣泡排序 排序 氣泡排序
既然寫了計組思來想去便打算把資料結構也寫下來,寫的時候總是發現看的時候無法發現的問題,受益良多。交換排序的基本思想 exchange until sorted 順序,分支,迴圈 注意偽 的熟悉 下面介紹兩種交換演算法 首先進行聯想,用乙個圖進行輔助聯想 水冒泡過程 頂部是陣列的begin,底部理解為...
氣泡排序 氣泡排序法
冒泡法是一種簡單的排序方法,它的實現非常簡單。首先對n個專案進行掃瞄,比較相領兩個專案的大小,若發現違背大小次序則進行互換,由此可以使n個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...