Bubble Sort 冒泡排序

一、基本思想

冒泡排序的基本概念是依次比较相邻的两个元数,将小的数放在前面,大的数放在后面。

即在第一趟排序中,首先比较第1个数和第2个数,将小数放前,大树放后;

然后比较第2个数和第3个数,将小数放前,大数放后。以此类推,如此继续,直到比较最后两个数,将小数放前,大数放后。至此,第一趟排序结束,将最大的数放到了最后!

第二趟:仍从第一对数开始比较,将小数放前,大数放后,一直比到倒数第2个数(倒数第1个数已经是最大的了),第二趟结束,倒数第2的位置上得到一个新的最大数。

以此类推,重复以上过程,直至最终完成排序。

由于排序过程中总是小数往前放,大数往后放,类似于气泡上升,所以成为冒泡排序。

二、示例代码

   public static void BubbleSort(int[] arr)
   {
      int n = arr.Length;
      for (int i = 0; i < n - 1; i++)
      {
          for (int j = i + 1; j < n; j++)
          {
              if (arr[i] > arr[j])
              {
                  int temp;
                  temp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = temp;
              }
          }
      }
   }

三、效率分析

稳定
空间复杂度O(1)
时间复杂度O(n2)
最差情况:反序,需要交换n*(n-1)/2个元素
最好情况:正序,不需要交换元素 O(n)

若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次交换,且不移动记录;

反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。

因此冒泡排序总的时间复杂度为O(n2)。

image

原文地址:https://www.cnblogs.com/fanyong/p/2413291.html