冒泡排序

8 阅读1分钟

冒泡排序

  • 特点:相邻元素两两比较,把较大的元素往下交换
  • 缺点:数据交换的次数太多了,效率低

时间复杂度

排序算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度
冒泡排序O(n^2)O(n)O(n^2)O(1)

代码

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

void BubbleSort(int arr[], int size) {
  for( int i = 0; i < size - 1; i++) {  // 循环的次数, 最后一次剩一个元素不需要比较
    bool flag = false;  // 如果没有做任何的数据交换,那么说明数据已经有序了

    for(int j = 0; j < size - 1 - i; j++) {  // 循环一次的处理
      if (arr[j] > arr[j + 1]) {
        int tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
        flag = true;
      }
    }

    if (!flag) {
      // 如果没有做任何的数据交换,那么说明数据已经有序了
      return;
    }
  }

}

int main() {

  int arr[10];
  srand(time(nullptr));

  for (int i = 0; i < 10; i++) {
    arr[i] = rand() % 100 + 1;
  }

  for (int v : arr) {
    cout << v << " ";
  }

  cout << endl;

  BubbleSort(arr, 10);

  for (int v : arr) {
    cout << v << " ";
  }

  cout << endl;

  return 0;
}

测试

➜  build git:(main) ✗ ./BubbleSort   
54 33 55 29 52 58 83 24 35 66 
24 29 33 35 52 54 55 58 66 83