當前位置:首頁 » 操作系統 » 冒泡演算法步驟

冒泡演算法步驟

發布時間: 2022-06-25 11:17:32

⑴ 98.34.45.32.36.5的冒泡排序過程

冒泡排序演算法
假如有n個數,從第一個數開始從頭到尾兩兩比較,當前一個數比後一個數大時,則交換他們的位置,直到最大的一個數被排在了數組的後尾。然後最後一個數固定,不再需要比較,只需要按照前面的方法重復比較前面的n-1個數。
①比較98和34,結果:34.98.45.32.36.5;
②比較98和45,結果:34.45.98.32.36.5;
……
⑤比較98和5,結果:34.45.32.36.5.98;
……

⑵ 什麼是冒泡排序演算法

冒泡排序演算法:重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重復地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「冒泡排序」。

(2)冒泡演算法步驟擴展閱讀:

冒泡排序演算法的原理如下:

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

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

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

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

⑶ C++冒泡排序的基本思想和步驟

冒泡排序的基本概念是:依次比較相鄰的兩個數,將大數放在前面,小數放在後面。即首先比較第1個和第2個數,將大數放前,小數放後。然後比較第2個數和第3個數,將大數放前,小數放後,如此繼續,直至比較最後兩個數,將大數放前,小數放後,此時第一趟結束,在最後的數必是所有數中的最小數。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再大於第2個數),將大數放前,小數放後,一直比較到最小數前的一對相鄰數,將大數放前,小數放後,第二趟結束,在倒數第二個數中得到一個新的最小數。如此下去,直至最終完成排序。
排序過程
設想被排序的數組R[1..N]垂直豎立,將每個數據元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R,凡掃描到違反本原則的輕氣泡,就使其向上"漂浮",如此反復進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。
演算法示例
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97
Procere BubbleSort(Var R : FileType) //從下往上掃描的起泡排序//
Begin
For I := 1 To N-1 Do //做N-1趟排序//
begin
NoSwap := True; //置未排序的標志//
For J := N - 1 DownTo 1 Do //從底部往上掃描//
begin
If R[J+1]< R[J] Then //交換元素//
begin
Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
NoSwap := False
end;
end;
If NoSwap Then Return//本趟排序中未發生交換,則終止演算法//
end
End; //BubbleSort//
該演算法的時間復雜性為O(n2),演算法為穩定的排序方法

⑷ 什麼是冒泡法

冒泡法也就是冒泡排序,是一種計算機科學領域的較簡單的排序演算法。冒泡排序也就是需要重復地走訪過要排序的元素列,然後挨個比較兩個相鄰的元素,如果他們的順序出現錯誤的情況就可以把他們交換過來。

(4)冒泡演算法步驟擴展閱讀:

冒泡排序演算法的原理如下:

1、比較相鄰的元素。

2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。

3、針對所有的元素重復以上的步驟,除了最後一個。

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

⑸ 給出冒泡排序演算法的簡要說明,畫出流程圖,並寫出使用冒泡演算法對三個數3,4,1進行排序的過程。

以升序排序為例
第一步:對整個待排序數列,從頭開始,對相鄰的兩個數進行比較,如果前者>後者,則交換,直至末尾;(這個過程稱之為「一趟」,一趟完成之後,最末尾的數字一定是數列中最大的了。所以下一趟不再考慮最末尾的數字。)
第二步:待排序數列為除了最末尾數字的數列,重復上述步驟;
第三步:待排序數列為除了最末尾兩個數字的數列,重復第一步;
……
第n步:待排序數列為最開頭數字的數列,這時,所有的數都已排好序。
處理結束。

對三個數3,4,1進行排序的過程:
第一趟:對3,4,1排序,比較3,4——3>4?否,不交換;比較4,1,4>1?是,交換。沒有更多需要比較的數,第一趟結束,最大值4已經在末尾,下一趟不再考慮。
第二趟:對3,1排序,比較3,1——3>1?是,交換。沒有更多需要比較的數,第二趟結束,末尾的3,4,都不再考慮。
第三趟:對1排序,只剩一個數,沒什麼可以比較的了。處理結束。
最終排序結果即:1,3,4。

⑹ 在c語言中,冒泡排序是怎樣做的如題 謝謝了

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("\n"); } -------------- 冒泡演算法 冒泡排序的演算法分析與改進 交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。 應用交換排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序 1、排序方法 將被排序的記錄數組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。 (1)初始 R[1..n]為無序區。 (2)第一趟掃描 從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對於每對氣泡(R[j+1],R[j]),若R[j+1].key<R[j].key,則交換R[j+1]和R[j]的內容。 第一趟掃描完畢時,"最輕"的氣泡就飄浮到該區間的頂部,即關鍵字最小的記錄被放在最高位置R[1]上。 (3)第二趟掃描 掃描R[2..n]。掃描完畢時,"次輕"的氣泡飄浮到R[2]的位置上…… 最後,經過n-1 趟掃描可得到有序區R[1..n] 注意: 第i趟掃描時,R[1..i-1]和R[i..n]分別為當前的有序區和無序區。掃描仍是從無序區底部向上直至該區頂部。掃描完畢時,該區中最輕氣泡飄浮到頂部位置R上,結果是R[1..i]變為新的有序區。 2、冒泡排序過程示例 對關鍵字序列為49 38 65 97 76 13 27 49的文件進行冒泡排序的過程 3、排序演算法 (1)分析 因為每一趟排序都使有序區增加了一個氣泡,在經過n-1趟排序之後,有序區中就有n-1個氣泡,而無序區中氣泡的重量總是大於等於有序區中氣泡的重量,所以整個冒泡排序過程至多需要進行n-1趟排序。 若在某一趟排序中未發現氣泡位置的交換,則說明待排序的無序區中所有氣泡均滿足輕者在上,重者在下的原則,因此,冒泡排序過程可在此趟排序後終止。為此,在下面給出的演算法中,引入一個布爾量exchange,在每趟排序開始前,先將其置為FALSE。若排序過程中發生了交換,則將其置為TRUE。各趟排序結束時檢查exchange,若未曾發生過交換則終止演算法,不再進行下一趟排序。 (2)具體演算法 void BubbleSort(SeqList R) { //R(l..n)是待排序的文件,採用自下向上掃描,對R做冒泡排序 int i,j; Boolean exchange; //交換標志 for(i=1;i<n;i++){ //最多做n-1趟排序 exchange=FALSE; //本趟排序開始前,交換標志應為假 for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描 if(R[j+1].key<R[j].key){//交換記錄 R[0]=R[j+1]; //R[0]不是哨兵,僅做暫存單元 R[j+1]=R[j]; R[j]=R[0]; exchange=TRUE; //發生了交換,故將交換標志置為真 } if(!exchange) //本趟排序未發生交換,提前終止演算法 return; } //endfor(外循環) } //BubbleSort 4、演算法分析 (1)演算法的最好時間復雜度 若文件的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數C和記錄移動次數M均達到最小值: Cmin=n-1 Mmin=0。 冒泡排序最好的時間復雜度為O(n)。 (2)演算法的最壞時間復雜度 若初始文件是反序的,需要進行n-1趟排序。每趟排序要進行n-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值: Cmax=n(n-1)/2=O(n2) Mmax=3n(n-1)/2=O(n2) 冒泡排序的最壞時間復雜度為O(n2)。 (3)演算法的平均時間復雜度為O(n2) 雖然冒泡排序不一定要進行n-1趟,但由於它的記錄移動次數較多,故平均時間性能比直接插入排序要差得多。 (4)演算法穩定性 冒泡排序是就地排序,且它是穩定的。 5、演算法改進 上述的冒泡排序還可做如下的改進: (1)記住最後一次交換發生位置lastExchange的冒泡排序 在每趟掃描中,記住最後一次交換發生的位置lastExchange,(該位置之前的相鄰記錄均已有序)。下一趟排序開始時,R[1..lastExchange-1]是有序區,R[lastExchange..n]是無序區。這樣,一趟排序可能使當前有序區擴充多個記錄,從而減少排序的趟數。具體演算法【參見習題】。 (2) 改變掃描方向的冒泡排序 ①冒泡排序的不對稱性 能一趟掃描完成排序的情況: 只有最輕的氣泡位於R[n]的位置,其餘的氣泡均已排好序,那麼也只需一趟掃描就可以完成排序。 【例】對初始關鍵字序列12,18,42,44,45,67,94,10就僅需一趟掃描。 需要n-1趟掃描完成排序情況: 當只有最重的氣泡位於R[1]的位置,其餘的氣泡均已排好序時,則仍需做n-1趟掃描才能完成排序。 【例】對初始關鍵字序列:94,10,12,18,42,44,45,67就需七趟掃描。 ②造成不對稱性的原因 每趟掃描僅能使最重氣泡"下沉"一個位置,因此使位於頂端的最重氣泡下沉到底部時,需做n-1趟掃描。 ③改進不對稱性的方法 在排序過程中交替改變掃描方向,可改進不對稱性

⑺ 數學上的冒泡法是什麼



法:
目的:按要求從大到小或從小到大排序。
基本思路:對尚未排序的各元素從頭到尾依次依次比較相鄰的兩個元素是否逆序(與欲排順序相反),若逆序就交換這兩元素,經過第一輪比較排序後便可把最大(或最小)的元素排好,然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序。
【可以看出如果有N個元素,那麼一共要進行n-1輪比較,第I輪要進行j=n-i次比較。】
(如:有5個元素,則要進行5-1輪比較。第3輪則要進行5-3次比較)
例如
利用冒泡法排序將7,4,3,12,8,1從小到大排序,則第三次的結果是_______?
解答:
一趟之後,12被排在最後一位
結果是4
3
7
8
1
12
兩次之後,結果是
3
4
7
1
8
12
三次之後,結果是
3
4
1
7
8
12
又如
設原來的數組
2
5
3
1
我們現在要從小到大排序
第一輪開始比
2和5比不動

2
5
3
1
5和3比交換

2
3
5
1
5和1比交換

2
3
1
5
第二輪
2和3比不動

2
3
1
5
3和1比交換

2
1
3
5
第三輪
2和1比交換

1
2
3
5
這樣排序就完成了
。因為是一輪一輪的比到所有的數,
就像冒泡泡一樣,所以叫冒泡法

⑻ c語言冒泡排序法詳解

任意兩個數作比較,大的放後面,小的放前面,然後大的在和下一個數比較,還是大的放後小的往前,以此類推,直到所有數比完了,然後輸出

熱點內容
網易蘋果游戲怎麼轉移到安卓 發布:2024-11-15 00:07:52 瀏覽:269
win7php環境搭建 發布:2024-11-15 00:06:55 瀏覽:17
erpjava 發布:2024-11-14 23:52:23 瀏覽:252
電腦版地平線四怎麼連上伺服器 發布:2024-11-14 23:46:42 瀏覽:471
ios怎麼變安卓 發布:2024-11-14 23:46:36 瀏覽:332
win7共享xp列印機拒絕訪問 發布:2024-11-14 23:45:29 瀏覽:749
引起資源配置失效的原因有哪些 發布:2024-11-14 23:35:22 瀏覽:14
c語言打字 發布:2024-11-14 23:11:06 瀏覽:892
存儲程序和程序控制的原理 發布:2024-11-14 22:53:23 瀏覽:322
python讀取json數據 發布:2024-11-14 22:51:52 瀏覽:931