這是在GOOGLE上搜到的
Bubble Sort(冒泡法)
最簡(jiǎn)單的排序方法是冒泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對(duì)這個(gè)“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個(gè)序列,并時(shí)刻注意兩個(gè)相鄰的元素的順序是否正確。如果發(fā)現(xiàn)兩個(gè)相鄰元素的順序不對(duì),即“輕”的元素在下面,就交換它們的位置。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置;處理二遍之后,“次輕”的元素就浮到了次高位置。在作第二遍處理時(shí),由于最高位置上的元素已是“最輕”元素,所以不必檢查。一般地,第i遍處理時(shí),不必檢查第i高位置以上的元素,因?yàn)榻?jīng)過(guò)前面i-1遍的處理,它們已正確地排好序。這個(gè)算法可實(shí)現(xiàn)如下。
(冒泡法排序是一個(gè)比較簡(jiǎn)單的排序方法。在待排序的數(shù)列基本有序的情況下排序速度較快。若要排序的數(shù)有n個(gè),則需要n-1輪排序,第j輪排序中,從第一個(gè)數(shù)開(kāi)始,相鄰兩數(shù)比較,若不符合所要求的順序,則交換兩者的位置;直到第n+1-j個(gè)數(shù)為止,第一個(gè)數(shù)與第二個(gè)數(shù)比較,第二個(gè)數(shù)與第三個(gè)數(shù)比較,......,第n-j個(gè)與第n+1-j個(gè)比較,共比較n-1次。此時(shí)第n+1-j個(gè)位置上的數(shù)已經(jīng)按要求排好,所以不參加以后的比較和交換操作。例如:第一輪排序:第一個(gè)數(shù)與第二個(gè)數(shù)進(jìn)行比較,若不符合要求的順序,則交換兩者的位置,否則繼續(xù)進(jìn)行二個(gè)數(shù)與第三個(gè)數(shù)比較......。直到完成第n-1個(gè)數(shù)與第n個(gè)數(shù)的比較。此時(shí)第n個(gè)位置上的數(shù)已經(jīng)按要求排好,它不參與以后的比較和交換操作;第二輪排序:第一個(gè)數(shù)與第二個(gè)數(shù)進(jìn)行比較,......直到完成第n-2個(gè)數(shù)與第n-1個(gè)數(shù)的比較;......第n-1輪排序:第一個(gè)數(shù)與第二個(gè)數(shù)進(jìn)行比較,若符合所要求的順序,則結(jié)束冒泡法排序;若不符合要求的順序,則交換兩者的位置,然后結(jié)束冒泡法排序。
共n-1輪排序處理,第j輪進(jìn)行n-j次比較和至多n-j次交換。
從以上排序過(guò)程可以看出,較大的數(shù)像氣泡一樣向上冒,而較小的數(shù)往下沉,故稱(chēng)冒泡法。)
Bubble Sort程序:
STL C++程序:(VC++6.0通過(guò))
#include "stdafx.h"
#include "iostream.h"
template<class T>
class doit{
private:
int x,y;
T temp;
public:
doit(T* in,int count)
{
for(y=0;y<count-1;y++)
{
for(x=1;x<count-y;x++)
{
if((*(in+x))>(*(in+x-1)))
{
temp=(*(in+x-1));
(*(in+x-1))=(*(in+x));
(*(in+x))=temp;
}
}
}
}
};
int main()
{
double a[4]={1.1,1.3,1.9,2.2};
doit<double> d(a,4);
for(int i=0;i<4;i++)
{
cout<<a<<endl;
}
return 0;
}
C語(yǔ)言程序:(TC 2.0通過(guò))
void doit(float* in,int count)
{
int x;
int y;
float temp;
for(y=0;y<count-1;y++)
{
for(x=1;x<count-y;x++)
{
if((*(in+x))>(*(in+x-1)))
{
temp=(*(in+x-1));
(*(in+x-1))=(*(in+x));
(*(in+x))=temp;
}
}
}
}