冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System;
2 using System.Collections.Generic;
3
4 namespace Com.Colobu.Algorithm.Exchange
5 {
6 /// <summary>
7 /// 冒泡排序是这样实现的:
8 ///
9 /// 1. 首先将所有待排序的数字放入工作列表中。
10 /// 2. 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。
11 /// 3. 重复2号步骤(倒数的数字加1。例如:第一次到倒数第二个数字,第二次到倒数第三个数字,依此类推...),直至再也不能交换。
12 ///
13 /// 平均时间复杂度:O(n^2)
14 /// Stability:Yes
15 /// </summary>
16 public class BubbleSortAlgorithm
17 {
18 public static void BubbleSort<T>(IList<T> szArray) where T:IComparable
19 {
20 int i;
21 int j;
22 Http://www.clobu.com
23
24 T temp; //交换变量
25 bool swapped = false;
26 for (i = szArray.Count - 1; i >= 0; i--)
27 {
28 for (j = 1; j <= i; j++)
29 {
30 if (szArray[j - 1].CompareTo(szArray[j]) > 0)
31 {
32 temp = szArray[j - 1];
33 szArray[j - 1] = szArray[j];
34 szArray[j] = temp;
35 swapped = true;
36 }
37 }
38 if (!swapped)
39 break;
40 }
41 }
42 }
43 }
44