氣泡排序演算法的兩種優化

2021-07-12 06:53:56 字數 1788 閱讀 9319

>氣泡排序(三種實現,兩種優化)

/*首先,我們先介紹bubblesort; 就是氣泡排序,氣泡排序大家應該最熟悉不過了;

氣泡排序演算法的運作如下:(從後往前)

1. 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

3. 針對所有的元素重複以上的步驟,除了最後乙個。

4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。[

我們以排序整形為例,**中的例子:6,5,4,3,2,1; */

} }}//沒有優化的方法,比較常規;

@bubblesort2:/*

略微的優化方案bubblesort2: 如果原陣列就是有序的 比如: 1,2,3,4;

如果我們繼續按照bubblesort1的方法,那還是要跑n-1趟,是不是有點浪費時間,

於是,我們就想到了乙個方法,沒跑完一趟就判斷一次原陣列現在是否有序,如果有序;

直接return 掉;於是這裡就有了乙個標誌位flag去幫助我們判斷!

*/@分析圖:

} if(flag == 1)//如果這趟走完,沒有發生交換,則原陣列有序;

break;

}}//加入標誌位優化;

@bubblesort3:/*

有了上面的乙個優化,大家肯定認為肯定不能再優化了吧,答案是否定的;

下面介紹第二部優化 bubblesort3: 減少內部迴圈比較的次數; */

@分析圖:

} if(flag == 1)//如果這趟走完,沒有發生交換,則原陣列有序;

break;

k = n;//最後一次交換的位置給k,減少比較的次數;

}}//最終優化

@ 主函式

#include#includeint main()

; int i = 0;

int len = sizeof(arr)/sizeof(arr[0]);

bubblesort3(arr,len);

for(i = 0;i < len; i++)

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

system("pause");

return 0;

}

寫的比較粗淺,希望可以幫助大家!

氣泡排序演算法及其兩種優化

1 排序方法 將被排序的記錄陣列r 1.n 垂直排列,每個記錄r i 看作是重量為r i key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r 凡掃瞄到違反本原則的輕氣泡,就使其向上 飄浮 如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。1 初始 r 1.n 為無序區。2...

氣泡排序演算法及其兩種優化

1 排序方法 將被排序的記錄陣列r 1.n 垂直排列,每個記錄r i 看作是重量為r i key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r 凡掃瞄到違反本原則的輕氣泡,就使其向上 飄浮 如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。1 初始 r 1.n 為無序區。2...

兩種氣泡排序的比較及冒泡演算法優化

第一種 void bubblesort int array,int len if noswap break 第二種 void bubblesort int array,int len if noswap break 沒有優化 void bubblesort1 int arr,int len 沒有優化...