當前位置:編程學習大全網 - 編程語言 - 冒泡排序算法

冒泡排序算法

冒泡排序(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

Procedure 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(n^2),算法為穩定的排序方

編輯本段

冒泡排序代碼

AAuto

bubble_sort = function(array){

var temp;

for( i=1;#array ){

//i前面的已經是最小的數,並排序好了

for(j=#array;i+1;-1){

//挨個比較

if(array[j]<array[j-1]){

//小的總是往前排

bubble = array[j]

array[j] = array[j-1];

array[j-1] = bubble;

}

}

}

}

io.print("----------------")

io.print("冒泡排序( 交換類換排序 )")

io.print("----------------")

array ={2;46;5;17;1;2;3;99;12;56;66;21};

bubble_sort(array,1,#array)

//輸出結果

for(i=1;#array;1){

io.print( array[i] )

}

C

void bubble_sort(int *x, int n)

{

int j, k, h, t;

for (h=n-1; h>0; h=k) /*循環到沒有比較範圍*/

{

for (j=0, k=0; j<h; j++) /*每次預置k=0,循環掃描後更新k*/

{

if (*(x+j) > *(x+j+1)) /*大的放在後面,小的放到前面*/

{

t = *(x+j);

*(x+j) = *(x+j+1);

*(x+j+1) = t; /*完成交換*/

k = j; /*保存最後下沈的位置。這樣k後面的都是排序排好了的。*/

}

}

}

}

C++

#include <iostream>

#define LEN 9

using namespace std;

int main()

{

int nArray[LEN];

for(int i=0;i<LEN;i++)nArray[i]=LEN-i;

cout<<"原始數據為:"<<endl;

for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";

cout<<endl;

//開始冒泡

{

int temp;

for(int i=LEN-1;i>0;i--)

for(int j=0;j<i;j++)

{

if(nArray[j]>nArray[j+1])

{

temp=nArray[j];

nArray[j]=nArray[j+1];

nArray[j+1]=temp;

}

}

}

//結束冒泡

cout<<"排序結果:"<<endl;

for(int i=0;i<LEN;i++)cout<<nArray[i]<<" ";

return 0;

}

  • 上一篇:ICT是什麽工作
  • 下一篇:手機空調萬能遙控器是什麽 空調萬能遙控器的原理
  • copyright 2024編程學習大全網