C 排序演算法 冒泡法

2021-04-20 02:15:58 字數 1590 閱讀 8903

在閱讀此博文前,請先閱讀我的博文「c#排序——基類設計 「,以了解基類的結構。

關於冒泡法的概念,網上有一大堆的介紹,你可以到baidu或goole去搜尋,這裡不作詳細解釋,這遍博文的主要目標是如用c#實現氣泡排序演算法。這裡只簡要的介紹一下氣泡排序的過程:

假設有乙個ilist型的集合list(集合的元素為list[0]到list[n-1], n = list.count),那麼第一次遍歷,從索引為0的元素開始,到索引為n-1的元素結束.在list的元素間移到時,每次都比較當前元素(假設索引號為i)與相鄰元素(這種情況為下一元素i+1)的大小,如果當前元素的值小於(對於降序排列為大於)相鄰元素的值,則將當前元素與其相鄰元素互換:

當i=0時,比較list[0]與list[1], 如果list[0] < list[1], 則將list[0]和list[1]互換。

當i=1時,比較list[1]與list[2], 如果list[1] < list[2], 則將list[1]和list[2]互換。

...當i=n-2時,比較list[n-2]與list[n-1],如果list[n-2] < list[n-1],則將list[n-2]與list[n-1]互換。

顯然經過第一輪遍歷後,list[n-1]為list集合中值最大(對於降序排列為最小)的元素。好了,list[n-1]的位置已經排好了,下一輪遍歷從list[0]開始,到list[n-2]結束。即:

第1輪遍歷,從list[0]開始,到list[n-1]結束,遍歷結束後,list[n-1]的位置確定了。

第2輪遍歷,從list[0]開始,到list[n-2]結束,遍歷結束後,list[n-2]位置確定了。

...第n-1輪遍歷,從list[0]開始,到list[1]結束,遍歷結束後,list[1]位置確定了。

第n輪遍歷,就剩下list[0]乙個元素了,其位置當然也就確定了,因此只根本就沒必要第n輪遍歷了,只需要n-1次遍歷即可。

好了,廢話少說,將上面的轉變成程式,得到我們的冒泡法排序器bubblesort的**:

public

class  bubblesorter : sorter }

} } }

其中swaplistitem是其類sorter的靜態方法,用於換list中的兩個元素。

現在可以用**測試排序是否正確:

int  array = ;

sorter sorter =  new  bubblesorter();

sorter.sort(array);

foreach  ( int  i  in  array)

怎麼樣?沒問題吧。是不是很簡單?現在還不高興得太早,程式雖然沒問題,但是效率不太高。如果我們在排序過程中發現list已經排好序了,就沒必要傻傻地地繼續掃瞄了。怎麼判斷list有沒有排序?很簡單,如果在一輪遍歷過程中,沒有發生元素交換,那麼list就是已經排好序了。好了,現在得到bubblesorter的最終版本:

using  system;

using  system.collections.generic;

using  system.text;

namespace  cyb.datastruct.sorting }

} }

} }

冒泡法排序c語言程式 演算法 冒泡法排序

對於乙個一維的陣列 列表 每個元素都和它旁邊的元素作比較,順序不對就交換位置。第一次處理全部n個元素,最大值將冒泡到陣列末尾位置。第二次處理全部n 1個元素,第三次處理全部n 2個元素。以此類推,每次都將最大值元素放到最右邊的位置。冒泡法的優點是任何時候陣列完全排好序就可以提前退出。來看動態演示 下...

演算法 氣泡排序法

氣泡排序就是把小的元素往前調或者把大的元素往後調 c語言 include define size 8 void bubble sort int a,int n void bubble sort int a,int n int main int i bubble sort number,size fo...

冒泡法排序演算法

演算法筆記 再回顧冒泡法排序 冒泡法是我們學習程式設計接觸到的第乙個排序演算法,簡單而形象,整個比對過程跟泉水冒泡十分形似。冒泡法排序首先拿第乙個元素與相鄰元素進行比較,如果它比較大,就相互交換,這樣第一輪遍歷下來,最大的值就確定了,第n輪也是如此,都是從第乙個開始,一直比較到倒數第n個,這樣最大的...