冒泡排序算法——C/C++

素颜马尾好姑娘i 2022-10-01 12:53 282阅读 0赞

冒泡排序

1. 算法思想

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

2. 排序步骤

  1. 2.1 默认认为原数据为无序的。
  2. 2.2 从第二个数据开始排序,进行数据比较,如果array[i]>array[i+1],就进行交换。
  3. 2.3 把这一轮比较结果,最小的置换到最前面(或者把最大的置换到最后面)。
  4. 2.4 置换后的为有序数组。
  5. 2.5 重复2-4步骤,直到数组有序为止。

3. 动图演示**

在这里插入图片描述

4. 完整代码

三个函数
交换函数:void swap(int array[],int x,int y)
排序函数:void BubbleSort(int array[],int size)
主函数:int main()
冒泡排序一种是小的向上浮,一种是大的向下沉。

  1. #include <stdio.h>
  2. void display(int array[], int size) {
  3. for (int i = 0; i < size; i++) {
  4. printf("%d ", array[i]);
  5. }
  6. printf("\n");
  7. }
  8. void swap(int array[], int x, int y) {
  9. int key = array[y];
  10. array[y] = array[x];
  11. array[x] = key;
  12. }
  13. //重的往下沉
  14. void BubbleSort(int array[], int size) {
  15. //外循环为排序趟数,size 个数进行 size-1 趟
  16. //内循环为每趟比较的次数,第 i 趟比较 size-1-i 次
  17. for (int i = 0; i < size - 1; i++) {
  18. for (int j = 0; j < size - 1 - i; j++) {
  19. if (array[j] > array[j + 1]) {
  20. swap(array, j, j + 1);
  21. }
  22. }
  23. //打印每次排序
  24. display(array, size);
  25. }
  26. }
  27. // 轻的往上浮
  28. void BubbleSort2(int array[], int size) {
  29. for (int i = 0; i < size - 1; i++) {
  30. for (int j = size - 1; j > i; j--) {
  31. if (array[j] < array[j - 1]) {
  32. swap(array, j, j - 1);
  33. }
  34. }
  35. // 打印每次排序
  36. display(array, size);
  37. }
  38. }
  39. int main() {
  40. int array[] = {
  41. 49, 38, 65, 97, 76, 13, 27, 49, 10};
  42. int size = sizeof(array) / sizeof(int);
  43. //打印原始数据
  44. printf("%d \n", size);
  45. display(array, size);
  46. BubbleSort(array, size);
  47. return 0;
  48. }

5. 结果展示(显示每次排序结果)

在这里插入图片描述在这里插入图片描述
5、算法分析
时间复杂度:

  1. 最好:O(n)
  2. 最坏:O(n^2)
  3. 平均:O(n^2)

空间复杂度:O(1)

稳定性:稳定

发表评论

表情:
评论列表 (有 0 条评论,282人围观)

还没有评论,来说两句吧...

相关阅读

    相关 排序算法——冒泡排序

    冒泡排序:    简单地说,冒泡排序就是一次比较相邻的两个数,将小的数往前放,大的数往后放(或者反过来),整个过程就像气泡网上浮一样,所以就形象地称为冒泡排序。

    相关 排序算法——冒泡排序

    前言 冒泡排序基本思想:假设数据元素存放于数组L中,初始化时,有序区为空,无序区为0~n-1;在无序区中,每次均从头至尾一次比较相邻的两个元素j和j+1,若存在逆序,则交

    相关 排序算法-冒泡排序

    冒泡排序 属于交换排序 每次比较左右两个数 ,小的放左边 大的放右边 第一轮比较完 会将最大的那位放在最后 ,第二轮会把倒数第二大的放在倒数第二位 依次 ![这里写图

    相关 排序算法】-冒泡排序

    前言 冒泡排序是所有排序算法里最为简单的一种,也是面试经常让你手写的一种算法。说实话在此之前我也写不出来冒泡,所以在算法这块我也是下过功夫的,今天我就来通俗讲解冒泡排序的

    相关 排序算法冒泡排序

    一、前言     冒泡排序是一种交换排序。     什么是交换排序呢?     答曰:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要

    相关 排序算法--冒泡排序

    1.基本思想:每次比较两个相邻的元素,如果顺序错误,则交换这两个元素的位置。 例如:对5,3,4,9,6这五个数按从小到大排序。 第一趟排序:先比较第一位数5和第二位

    相关 排序算法——冒泡排序

    排序算法——冒泡排序 > 冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的比较,从开始的第一对到结尾的最后一对。通过每一趟的比较,