kingfeng1983
級別: *
|
各位高手知道的請幫助講解一下,冒泡法? 最好用例子說明! 本人非常感激那些熱心助人的好人! |
---|---|
|
shuaigeshi
蟄伏......
級別: 略有小成
|
冒泡法?記得學C語言的時候見到過 是用于對一組數據選擇性的排序 你要問的是這個么 |
---|---|
|
zxc6688
工業自動化是我們的目標
級別: 略有小成
|
這是在GOOGLE上搜到的 Bubble Sort(冒泡法) 最簡單的排序方法是冒泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對這個“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即“輕”的元素在下面,就交換它們的位置。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置;處理二遍之后,“次輕”的元素就浮到了次高位置。在作第二遍處理時,由于最高位置上的元素已是“最輕”元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。這個算法可實現如下。 (冒泡法排序是一個比較簡單的排序方法。在待排序的數列基本有序的情況下排序速度較快。若要排序的數有n個,則需要n-1輪排序,第j輪排序中,從第一個數開始,相鄰兩數比較,若不符合所要求的順序,則交換兩者的位置;直到第n+1-j個數為止,第一個數與第二個數比較,第二個數與第三個數比較,......,第n-j個與第n+1-j個比較,共比較n-1次。此時第n+1-j個位置上的數已經按要求排好,所以不參加以后的比較和交換操作。例如:第一輪排序:第一個數與第二個數進行比較,若不符合要求的順序,則交換兩者的位置,否則繼續進行二個數與第三個數比較......。直到完成第n-1個數與第n個數的比較。此時第n個位置上的數已經按要求排好,它不參與以后的比較和交換操作;第二輪排序:第一個數與第二個數進行比較,......直到完成第n-2個數與第n-1個數的比較;......第n-1輪排序:第一個數與第二個數進行比較,若符合所要求的順序,則結束冒泡法排序;若不符合要求的順序,則交換兩者的位置,然后結束冒泡法排序。 共n-1輪排序處理,第j輪進行n-j次比較和至多n-j次交換。 從以上排序過程可以看出,較大的數像氣泡一樣向上冒,而較小的數往下沉,故稱冒泡法。) Bubble Sort程序: STL C++程序:(VC++6.0通過) #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語言程序:(TC 2.0通過) 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; } } } } |
|
---|---|---|
|