
文章插圖
大家好,小跳來為大家解答以上的問題 。冒泡排序法的流程圖,冒泡排序法這個很多人還不知道,現在讓我們一起來看看吧!
1、main() { int i,j,temp; int a[10]; for(i=0;i<10;i++) scanf ("%d,",&a[i]); for(j=0;j<=9;j++) { for (i=0;i<10-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} } for(i=1;i<11;i++) printf("%5d,",a[i] ); printf(""); }--------------冒泡算法冒泡排序的算法分析與改進 交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止 。
2、 應用交換排序基本思想的主要排序方法有:冒泡排序和快速排序 。
3、 冒泡排序 排序方法 將被排序的記錄數組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡 。
4、根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮" 。
5、如此反復進行,直到最后任何兩個氣泡都是輕者在上,重者在下為止 。
【冒泡排序法 冒泡排序法的流程圖】6、 (1)初始 R[1..n]為無序區 。
7、 (2)第一趟掃描 從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置 。
8、即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對于每對氣泡(R[j+1],R[j]),若R[j+1].key
10、 (3)第二趟掃描 掃描R[2..n] 。
11、掃描完畢時,"次輕"的氣泡飄浮到R[2]的位置上…… 最后 , 經過n-1 趟掃描可得到有序區R[1..n] 注意: 第i趟掃描時 , R[1..i-1]和R[i..n]分別為當前的有序區和無序區 。
12、掃描仍是從無序區底部向上直至該區頂部 。
13、掃描完畢時 , 該區中最輕氣泡飄浮到頂部位置R上,結果是R[1..i]變為新的有序區 。
14、 2、冒泡排序過程示例 對關鍵字序列為49 38 65 97 76 13 27 49的文件進行冒泡排序的過程 3、排序算法 (1)分析 因為每一趟排序都使有序區增加了一個氣泡,在經過n-1趟排序之后 , 有序區中就有n-1個氣泡,而無序區中氣泡的重量總是大于等于有序區中氣泡的重量,所以整個冒泡排序過程至多需要進行n-1趟排序 。
15、 若在某一趟排序中未發現氣泡位置的交換,則說明待排序的無序區中所有氣泡均滿足輕者在上,重者在下的原則 , 因此,冒泡排序過程可在此趟排序后終止 。
16、為此,在下面給出的算法中,引入一個布爾量exchange,在每趟排序開始前,先將其置為FALSE 。
17、若排序過程中發生了交換,則將其置為TRUE 。
18、各趟排序結束時檢查exchange,若未曾發生過交換則終止算法,不再進行下一趟排序 。
19、 (2)具體算法 void BubbleSort(SeqList R) { //R(l..n)是待排序的文件,采用自下向上掃描,對R做冒泡排序 int i,j; Boolean exchange; //交換標志 for(i=1;i=i;j--) //對當前無序區R[i..n]自下向上掃描 if(R[j+1].key
21、 冒泡排序最好的時間復雜度為O(n) 。
22、 (2)算法的最壞時間復雜度 若初始文件是反序的,需要進行n-1趟排序 。
23、每趟排序要進行n-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置 。
24、在這種情況下,比較和移動次數均達到最大值: Cmax=n(n-1)/2=O(n2) Mmax=3n(n-1)/2=O(n2) 冒泡排序的最壞時間復雜度為O(n2) 。
25、 (3)算法的平均時間復雜度為O(n2) 雖然冒泡排序不一定要進行n-1趟,但由于它的記錄移動次數較多,故平均時間性能比直接插入排序要差得多 。
26、 (4)算法穩定性 冒泡排序是就地排序,且它是穩定的 。
27、 5、算法改進 上述的冒泡排序還可做如下的改進: (1)記住最后一次交換發生位置lastExchange的冒泡排序 在每趟掃描中,記住最后一次交換發生的位置lastExchange,(該位置之前的相鄰記錄均已有序) 。
28、下一趟排序開始時,R[1..lastExchange-1]是有序區 , R[lastExchange..n]是無序區 。
29、這樣,一趟排序可能使當前有序區擴充多個記錄,從而減少排序的趟數 。
30、具體算法【參見習題】 。
31、 (2) 改變掃描方向的冒泡排序 ①冒泡排序的不對稱性 能一趟掃描完成排序的情況: 只有最輕的氣泡位于R[n]的位置,其余的氣泡均已排好序,那么也只需一趟掃描就可以完成排序 。
32、 【例】對初始關鍵字序列12,18,42,44,45,67 , 94,10就僅需一趟掃描 。
33、 需要n-1趟掃描完成排序情況: 當只有最重的氣泡位于R[1]的位置,其余的氣泡均已排好序時,則仍需做n-1趟掃描才能完成排序 。
34、 【例】對初始關鍵字序列:94,10,12,18,42,44,45,67就需七趟掃描 。
35、 ②造成不對稱性的原因 每趟掃描僅能使最重氣泡"下沉"一個位置,因此使位于頂端的最重氣泡下沉到底部時,需做n-1趟掃描 。
36、 ③改進不對稱性的方法 在排序過程中交替改變掃描方向,可改進不對稱性 。
本文到此分享完畢,希望對大家有所幫助 。
- q彈春卷簡單做法視頻
- 蘋果5s怎么刷回iOS9系統
- 李子能做罐頭嗎
- 蜜蠟爆花方法
- 駕考中途能換駕校嗎
- 惡鄰強占宅基地怎么辦士地法耕地保護條例是否有效
- 水晶蝦 水晶蝦仁的正宗做法
- 產品售后價值成本核算方法
- 山烏龜的種植方法
- 大眾一直在考慮采用更具運動感的帕薩特變體的想法
