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

演算法冒泡法

發布時間: 2022-06-12 09:00:42

❶ 冒泡排序的演算法原理

冒泡排序演算法的運作如下:(從後往前) 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重復以上的步驟,除了最後一個。 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

❷ 冒泡排序演算法有幾種寫法

冒泡排序演算法有兩種,一種是從大到小排,另一種是從小到大排。

冒泡排序也是一種穩定排序演算法。因為冒泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變。

❸ 什麼是冒泡法[詳細的講下]

冒泡排序 冒泡排序:BubbleSort
基本概念
冒泡排序的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再大於第2個數),將小數放前,大數放後,一直比較到最小數前的一對相鄰數,將小數放前,大數放後,第二趟結束,在倒數第二個數中得到一個新的最小數。如此下去,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
用二重循環實現,外循環變數設為i,內循環變數設為j。外循環重復9次,內循環依次重復9,8,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,9,對於每一個i, j的值依次為1,2,...10-i。
產生
在許多程序設計中,我們需要將一個數列進行排序,以方便統計,常見的排序方法有冒泡排序,二叉樹排序,選擇排序等等。而冒泡排序一直由於其簡潔的思想方法和比較高的效率而倍受青睞。
排序過程
設想被排序的數組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),演算法為穩定的排序方
冒泡排序c++代碼
#include <iostream.h>
void BubbleSort(int* pData,int Count)
{
int iTemp;
for(int i=1;i<Count;i++)
{
for(int j=Count-1;j>=i;j--)
{
if(pData[j]<pData[j-1])
{
iTemp = pData[j-1];
pData[j-1] = pData[j];
pData[j] = iTemp;
}
}
}
}
void main()
{
int data[] = {10,9,8,7,6,5,4};
BubbleSort(data,7);
for (int i=0;i<7;i++)
cout<<data[i]<<" ";
cout<<"\n";
}
冒泡排序Ruby代碼
def bubble(arr)
(arr.length-1).downto(1) do |j|
a1 = arr.p
j.times do |i|
if arr > arr[i+1]
arr,arr[i+1] = arr[i+1],arr
end
end
break if a1 == arr
end
arr
end
冒泡排序Java代碼
static void BubbleSort(int a []){
int temp=0;
for (int i = 0; i < a.length ; i++) {
for (int j = 0; j < a.length - i - 1; j++){
if (a[j]>a[j + 1]){ //把這里改成大於,就是升序了
temp=a[j];
a[j]=a[j + 1];
a[j + 1]=temp;
}
}
}
}
冒泡排序Visual Basic代碼
Option Explicit
Private Sub Form_click()
Dim a, c As Variant
Dim i As Integer, temp As Integer, w As Integer
a = Array(12, 45, 17, 80, 50)
For i = 0 To UBound(a) - 1
If (a(i) > a(i + 1)) Then '若是遞減,改為a(i)<a(i+1)
temp = a(i)
a(i) = a(i + 1)
a(i + 1) = temp
End If
Next
For Each c In a
Print c;
Next
End Sub
冒泡排序Pascal代碼
<i id="bks_9tjbxut2">program bubblesort;
const
N=20;
MAX=10;
var
a:array[1..N] of 1..MAX;
temp,i,j:integer;
begin
randomize;
for i:=1 to N do a:=1+random(MAX);
writeln('Array before sorted:');
for i:=1 to N do write(a,' ');
writeln;
for i:=N-1 downto 1 do
for j:=1 to i do
if a[j]<a[j+1] then
begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp
end;
writeln('Array sorted:');
for i:=1 to N do write(a,' ');
writeln;
writeln('End sorted.');
readln;
end.
冒泡排序C#代碼
public void BubbleSort(int[] array) {
int length = array.Length;
for (int i = 0; i <= length - 2; i++) {
for (int j = length - 1; j >= 1; j--) {
if (array[j] < array[j - 1] ) {
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
冒泡排序Python代碼
#algo
def bubble(list):
count = len(list) -1
while count > 0 :
i = 0
onceflag = True
while i < count :
if int(list) > int(list[i+1]) :
tmp = list
list = list [i+1]
list[i+1] =tmp
onceflag = False
i = i + 1
if onceflag : return list
count = count - 1
return list
#test
li = [1,9,8,5,4,3,6,7,0,2]
print bubble(li)
冒泡排序法的改進
比如用冒泡排序將4、5、7、1、2、3這6個數排序。在該列中,第二趟排序結束後,數組已排好序,但計算機此時並不知道已經反排好序,計算機還需要進行一趟比較,如果這一趟比較,未發生任何數據交換,則知道已排序好,可以不再進行比較了。因而第三趟比較還需要進行,但第四、五趟比較則是不必要的。為此,我們可以考慮程序的優化。
為了標志在比較中是否進行了,設一個布爾量flag。在進行每趟比較前將flag置成true。如果在比較中發生了數據交換,則將flag置為false,在一趟比較結束後,再判斷flag,如果它仍為true(表明在該趟比較中未發生一次數據交換)則結束排序,否則進行下一趟比較。
性能分析
若記錄序列的初始狀態為"正序",則冒泡排序過程只需進行一趟排序,在排序過程中只需進行n-1次比較,且不移動記錄;反之,若記錄序列的初始狀態為"逆序",則需進行n(n-1)/2次比較和記錄移動。因此冒泡排序總的時間復雜度為O(n*n)。

❹ 什麼是冒泡排序演算法

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

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

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

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

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

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

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

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

❺ 數學上的冒泡法是什麼



法:
目的:按要求從大到小或從小到大排序。
基本思路:對尚未排序的各元素從頭到尾依次依次比較相鄰的兩個元素是否逆序(與欲排順序相反),若逆序就交換這兩元素,經過第一輪比較排序後便可把最大(或最小)的元素排好,然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序。
【可以看出如果有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
這樣排序就完成了
。因為是一輪一輪的比到所有的數,
就像冒泡泡一樣,所以叫冒泡法

❻ 冒泡排序法是什麼

冒泡排序的英文Bubble Sort,是一種最基礎的交換排序。

大家一定都喝過汽水,汽水中常常有許多小小的氣泡,嘩啦嘩啦飄到上面來。這是因為組成小氣泡的二氧化碳比水要輕,所以小氣泡可以一點一點向上浮動。而我們的冒泡排序之所以叫做冒泡排序,正是因為這種排序演算法的每一個元素都可以像小氣泡一樣,根據自身大小,一點一點向著數組的一側移動。

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

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

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

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

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

  • 具體如何來移動呢?讓我們來看一個栗子:

    希望對您有所幫助!~

    ❼ 冒泡排序法

    1、冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序演算法。
    2、它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
    這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

    冒泡排序演算法的運作如下:(從後往前)
    1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
    2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
    3、針對所有的元素重復以上的步驟,除了最後一個。
    4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

    ❽ 誰能講一下冒泡排序原理

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

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

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

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

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

    2,演算法穩定性:

    冒泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。

    所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以冒泡排序是一種穩定排序演算法。



      ❾ 冒泡排序法是如何排序的

      冒泡排序演算法的原理:

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

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

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

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

      (9)演算法冒泡法擴展閱讀:

      冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序演算法。

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

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

      演算法穩定性:

      冒泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以冒泡排序是一種穩定排序演算法。

    熱點內容
    給首付解壓 發布:2024-11-02 22:24:01 瀏覽:51
    活春文件夾 發布:2024-11-02 22:22:18 瀏覽:144
    pythonlist參數傳遞 發布:2024-11-02 22:18:57 瀏覽:598
    林肯冒險家買哪個配置人多 發布:2024-11-02 22:14:34 瀏覽:542
    馬鈴薯存儲 發布:2024-11-02 22:09:21 瀏覽:362
    android的title居中 發布:2024-11-02 21:59:53 瀏覽:876
    orchard源碼 發布:2024-11-02 21:51:20 瀏覽:940
    ntp伺服器地址修改 發布:2024-11-02 21:31:46 瀏覽:818
    c打開文件夾選中文件 發布:2024-11-02 21:31:12 瀏覽:600
    sql資料庫表大小 發布:2024-11-02 21:31:10 瀏覽:578