zoukankan      html  css  js  c++  java
  • 冒泡排序(Bubble Sort)

    1. 冒泡排序
      • 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
    2.  算法描述(依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。)
      • 第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

      •  比较第2和第3个数,将小数 放在前面,大数放在后面。

      •  ......   

      • 如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成

      •  在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

      •  在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

      •  依次类推,每一趟比较次数减少依次

    3. 动图演示 

      image                                                                                                     
    4.  代码实现

      /**
           * 冒泡排序
           *
           * @param array
           * @return
           */
          public static int[] bubbleSort(int[] array) {
              if (array.length == 0)
                  return array;
              for (int i = 0; i < array.length; i++)
                  for (int j = 0; j < array.length - 1 - i; j++)
                      if (array[j + 1] < array[j]) {
                          int temp = array[j + 1];
                          array[j + 1] = array[j];
                          array[j] = temp;
                      }
              return array;
          }  

    5. 算法分析

      • 由上图可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数
      • 冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。
      • 时间复杂度
        • 如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。最佳情况:T(n) = O(n)

        • 如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值。最差情况:T(n) = O(n2)

        • 综上所述:冒泡排序总的平均时间复杂度为:O(n2) 

      • 空间复杂度:O(1)
  • 相关阅读:
    ZOJ 2158 Truck History
    Knight Moves (zoj 1091 poj2243)BFS
    poj 1270 Following Orders
    poj 2935 Basic Wall Maze (BFS)
    Holedox Moving (zoj 1361 poj 1324)bfs
    ZOJ 1083 Frame Stacking
    zoj 2193 Window Pains
    hdu1412{A} + {B}
    hdu2031进制转换
    openjudge最长单词
  • 原文地址:https://www.cnblogs.com/lj1507899927/p/13284212.html
Copyright © 2011-2022 走看看