假設現在我們有一組資料a=,將資料組中的資料元素從小到大排列(即順序,反之逆序),使得資料組由無序變為有序。
第一步:按照從左到右的順序獲取資料元素。(注意:「從左到右」是我們在視覺上看這組資料的描述,在記憶體中或者說在寫**時,我們是按照資料元素的索引從小到大獲取元素的。)
第二步:比較獲取的第乙個元素與第二個元素的大小,如果第乙個元素大,則兩者交換位置。
第三步:比較第二個元素與第三個元素的大小,如果第二個元素大,則兩者交換位置。
第四步:依次比較,直到比較完第n-1個元素和第n個元素的大小。(註解:我們需要比較n-1次,比較的結果是數值最大的元素放在了最右端。對這組資料而言,我們比較了9次,比較的結果是元素9被放在了最右端。)
第五步:重複第
一、二、三、四步,直到所有元素順序。(註解:每從左到右比較n-1次(簡稱一趟比較),最大的元素被移到最右端,我們再做n-1趟比較,就能將所有元素順序。)
通過反覆將相鄰元素進行比較的方式使得數值大的元素逐漸右移。
using system;
using system.collections.generic;
using system.diagnostics;
using system.linq;
using system.text;
using system.threading.tasks;
namespace bubblesort
; program ps=new program();
ps.bubblesort1(ref a);
console.writeline("排序結果:");
我們知道,我們實現的演算法應該盡可能對各種情況適用,也就是說氣泡排序演算法應該可以將各種不同情況的資料進行排序。如果我們面臨這樣一組資料該如何呢:a=。
顯然,這組資料已經是順序的。我們只要做一趟比較就夠了。而且對於另外一組類似的資料a=,我們也不需要做n-1(即9)趟比較。
現在,我們要將兩種情況綜合考慮,避免做無用功。
我們的辦法是加上乙個判斷,每做了n-1次比較,我們判斷一下,元素組是否順序。
考慮另外一種情況,每一趟比較,最大的元素被右移。這組資料的右端逐漸變得有序。如果做了5趟比較,那麼這組資料右端的五個資料元素必然已經是順序的,我們不必再對這5個元素進行比較了,也即每趟比較時我們不用再做n-1次比較了。
現在我們要把這一種情況再綜合考慮進去。
(注意:在實際中,這些情況基本上不是靠分析出來的,而是靠窮舉,乙個個舉例出來的)
using system;
using system.collections.generic;
using system.diagnostics;
using system.linq;
using system.text;
using system.threading.tasks;
namespace bubblesort
program ps=new program();
ps.bubblesortb(ref a);
console.writeline("排序結果:");
排序演算法c#實現之歸併排序詳解
排序演算法c#實現之插入排序詳解
排序演算法c#實現之選擇排序詳解
氣泡排序演算法 C 氣泡排序演算法排序詳解
氣泡排序是最簡單的排序方法,理解起來容易。雖然它的計算步驟比較多,不是最快的,但它是最基本的,初學者一定要掌握。c 氣泡排序演算法的例項源 一些排序方法的 集錦,該函式模板使用冒泡法對集合元素進行排序,引數說明 collection 集合物件,集合物件必須提供 操作。element 集合元素,該引數...
演算法 排序之氣泡排序詳解
氣泡排序演算法的運作如下 從後往前 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...
C 排序演算法之氣泡排序
氣泡排序 思想 通過一系列的 交換 動作完成。首先第乙個記錄和第二個記錄比較,如果第乙個大,則二者交換,否則不交換 然後第二個記錄和第三個記錄比較,如果第二個大,則二者交換,否則不交換.一直按這種方式進行下去,最終最大的那個記錄被交換到了最後,一趟氣泡排序完成。這個過程中,大的記錄像一塊石頭一樣 沉...