冒泡排序法

  今天是第一次在博客园写文章,呵呵,简单点,以后会慢慢深入的,欢迎拍砖。


  冒泡排序(Bubble Sort,泡沫排序或气泡排序)它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

  这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  这个算法所到底就是拿出一个元素和其他所有的元素比较一下,然后每一次循环都把这次循环最小的元素排在最前边。

  下边是代码:

class BubbleSort
{
public static void Bubble(ref int[] array)
{
for (int i = 0; i < array.Length - 1; i++)
{
for (int j = i + 1; j < array.Length; j++)//这里注意了,你会发现现在比较的所有元素都是array[i]
                                 ,而j是一直在变化,所以这次循环完成以后,array[i]是循环
                                   中最小的一个元素
{
if (array[i] > array[j])
{
int temp = array[j];
array[j]
= array[i];
array[i]
= temp;
}
}
}
}

}

   冒泡排序对n个项目需要o(n2)的比较次数。尽管这个算法是最简单了解和实作的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。

   可能有很多朋友们不知道怎么计算算法时间复杂度,下边在介绍一下时间复杂度如何计算:

   常见的时间复杂度,按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、k次方阶O(n^k)、指数阶O(2^n)。

   下边这段转自http://blog.csdn.net/xingqisan/archive/2008/11/02/3206303.aspx

    介绍的很清楚,我就不写了

 求解算法的时间复杂度的具体步骤是: 
  ⑴ 找出算法中的基本语句; 
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。 
  ⑵ 计算基本语句的执行次数的数量级; 
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
  ⑶ 用大Ο记号表示算法的时间性能。
  将基本语句执行次数的数量级放入大Ο记号中。
  如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
  for (i=1; i<=n; i++)
  x++;

  for (i=1; i<=n; i++)
  for (j=1; j<=n; j++)
  x++;

  第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n2)。
原文地址:https://www.cnblogs.com/bugY/p/2029799.html