>氣泡排序(三種實現,兩種優化)
/*首先,我們先介紹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 沒有優化...