美文网首页
算法复习-交换类排序(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 .算法思想冒泡排序是一种简单的交换类排序算法,能够将相邻的元素进行交换,从而逐步将待排序序列变成有序序列。冒泡...

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

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

  • 排序算法时间复杂度、空间复杂度、稳定性比较

    一、排序算法的分类 1.插入类排序直接插入排序,折半插入排序,希尔排序2.交换类排序冒泡排序,快速排序3.选择类排...

  • (1)基本算法

    三大类 1、交换排序算法 冒泡(数据量小)-> 快速2、插入 类排序3、选择 类排序 求和 1-1/2+1/3...

  • 排序算法

    排序算法 非线性时间比较类排序 交换排序 冒泡排序 快速排序 插入排序 插入排序 希尔排序 选择排序 简单选择排序...

  • 排序算法

    排序算法 冒泡排序 选择排序 直接插入排序 希尔排序 堆排序 归并排序 快速排序 冒泡排序 冒泡排序是一种交换排序...

  • 冒泡排序算法

    冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。冒泡排序算法的思路就是交换排序,通过相...

  • 05.交换类排序(冒泡排序,快速排序)

    05.交换类排序(冒泡排序,快速排序) 1、 交换类排序 基本思想: 两两比较待排序记录的关键字,如果发生逆序(...

  • 冒泡算法/选择排序算法/直接插入排序算法C语言实现

    排序算法 冒泡排序 选择排序 冒泡排序和选择排序的核心思路: 冒泡排序是:相邻两个元素两两进行比较,小则交换位置。...

网友评论

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

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