排序 區域性氣泡排序

2021-06-07 17:20:35 字數 1711 閱讀 7470

什麼是氣泡排序(為了更清楚地說明區域性冒泡)

對於一組無序資料,兩兩相鄰比較,若反序則交換,直到沒有反序為止。比如有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個專案中的最大者換到最後。然後對剩下的未排序好的專案再進行掃瞄,使它們的最大者換到表的最後。以此類推,直到將表全部排序好為止。這種排序方法,每遍掃瞄以後,都縮短了待...