美文网首页
算法复习-交换类排序(1)-冒泡排序

算法复习-交换类排序(1)-冒泡排序

作者: 桔子满地 | 来源:发表于2018-06-20 10:05 被阅读0次

    冒泡排序(BubbleSort)

    应该是最基础的一个排序方法啦,大一老师就讲过的,所以在我脑海中也是最熟的一个排序算法了.

    冒泡排序顾名思义,在每躺冒泡中,大的关键字像石头一样“沉底”,小的关键字像气泡一样逐渐向上“浮动”,最终使得整个序列有序(这个概念解释好苍白hhhhh)

    代码:

    #include <iostream>
    using namespace std;
    
    void BubbleSort(int array[], int n) {
      int i, j, temp, flag;
    
      for (i = 0; i < n; ++i) {
        flag = 0;
        for (j = i; j < n-1; ++j) {
          if (array[j] > array[j+1]) {
            temp = array[j];
            array[j] = array[j+1];
            array[j+1] = temp;
            flag = 1;
          }
        }
        if (flag == 0){
          /* 一趟排序过程中没有发生关键字交换
           * 则证明序列有序,排序结束*/
          return;
        }
      }
    }
    
    void print_array(int array[], int n){
      for (int i = 0; i < n; ++i)
        cout<<array[i]<<" ";
      cout<<endl;
    }
    
    int main() {
      int array[] = {1, 3, 8, 4, 6, 7};
      print_array(array, 6);
      BubbleSort(array, 6);
      print_array(array, 6);
    
      return 0;
    }
    

    复杂度分析:

    1. 时间复杂度
    1)最坏情况:内层循环每次都执行, 故时间复杂度为O(n^2)
    2)最好情况:原本就有序,内层循环不发生,时间复杂度为O(n)
    综合来看,时间复杂度为O(n^2).

    2. 空间复杂度
    只需要一个temp, 故空间复杂度为O(1)。

    相关文章

      网友评论

          本文标题:算法复习-交换类排序(1)-冒泡排序

          本文链接:https://www.haomeiwen.com/subject/uffzeftx.html