目的
按要求從大到小或從小到大排序。
基本思路
對尚未排序的各元素從頭到尾依次比較相鄰的兩個元素是否逆序(與欲排順序相反),若逆序就交換這兩元素,經過第一輪比較排序後便可把最大(或最小)的元素排好,然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序。可以看出如果有 n 個元素,那么一共要進行 n-1 輪比較,第 i 輪要進行 j=n-i 次比較。(如:有5個元素,則要進行5-1輪比較。第3輪則要進行5-3次比較)
實例
下面以C語言為例子給大家一個明確的表示:
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("輸入10個整數:\n");
for( i = 0; i < 10; i ++ )
scanf("%d",&a[ i ]); //依次輸入10個整數
for( j = 0; j < 9; j ++ ) //進行9輪排序 即n-1次
{
for( i = 0; i < 9-j; i ++) //每輪進行n-1-j 次比較,最多n-1-j 次交換
if( a[ i ] > a[ i + 1 ] )
{
t = a[ i ] ;
a[ i ] = a[ i + 1 ]; //大的沉底向a[9](依次)逼進
a[ i + 1 ] = t;
}
}
printf("排序結果:");
for( i = 0; i < 10; i ++ ) //依次輸出排序結果
printf("%d\t",a[ i ]);
printf("\n");
}
PASCAL為例子
procedure Bubble_Sort(var L:List);
vari,j:position;
begin
for i:=First(L) to Last(L)-1 do
for j:=First(L) to Last(L)-i do
if L[j]>L[j+1] then 4 swap(L[j],L[j+1]);
//交換L[j]和L[j+1]
end;
下面使用c++語言編寫
#include<iostream>
using namespace std;
void main()
{
int a[9],i,j,temp;
cout<<"請輸入數字:"<<endl;
for(i=0;i<9;i++)
cin>>a[i]; //依次輸入n個整數
for(i=0;i<9;i++)
{
for(j=i+1;j<9;j++)
if(a[i]<a[j]) //利用臨時變數temp交換順序
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
for(i=0;i<9;i++)
cout<<a[i]<<' '; //依次輸出結果
system("pause");
}
下面使用Visual Basic編寫
Option Explicit
Private Sub Form_Load()
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