冒泡排序-C语言

简介: 冒泡排序-C语言

🥰前言


       🍔在学数据结构的第一节课就知道了数据结构课程是要管理并且学会操作数据,当然操作数据首先想到的就是数据的排序,排过顺序的数据的使用价值才够大。前面我们学习了顺序表也学习了链表等等,这些就是储存数据的方法,下面我们来看一看冒泡排序的特点与效率怎么样。😍


a8a5ee6ea87390085e0472b723bcea2c_83cfefe4ebc946fbac76c4a607324679.png


冒泡的由来


       🍁简介:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。


时间空间复杂度


✅时间复杂度: O()  


✅空间复杂度: O(1)


🚨注意:这里的是以最坏的情况去算的


排序原理


      🍪 原理:通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,如果发现顺序跟想要的不一样则交换这两个数据的位置,使值较大(或较小)的数据逐渐从前移向后部,就如果水底下的气泡一样逐渐向上冒。


🥰原理图解:


3c992a997210bb92d1270fe32c591d8f_4c2edd64bb24c3083ada5cd0b335b7f3.gif


        ✅正如图中我们看到的这样,把比前一个小的的数据,想泡泡一样慢慢的“浮出”


代码


🥝升序代码:


#include <stdio.h>
//冒泡排序(升序)
void Bobblesort(int* arr, int n)
{
    assert(arr); 
  int pos = 1;//为了提高效率,增加一个判断,假设整个数据已经有序
  for (int i = 0; i < n; i++)//控制遍历的趟数
  {
  for (int j = 0; j < n - i - 1; j++)//控制每一趟比较的次数
  {
    if (arr[j] > arr[j + 1])
    {
    pos = 0;//存在交换情况,则证明这组数据还有可能乱序,修改POS的值为假
    int tmp = arr[j]; //设置中间变量tmp记录要交换的其中一个数据
    arr[j] = arr[j + 1];
    arr[j + 1] = tmp;
    }
  }
  if (pos)//当数据已经有序则提前退出
    break;
  }
}
//打印数据
void print(int arr[], int n)
{
  for (int i = 0; i < n; i++)
  {
  printf("%d ", arr[i]);
  }
  printf("\n");
}
//测试函数正确性
int main()
{
  int arr[10] = { 2,3,5,1,6,9,0,4,7,8 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  printf("排序前:");
  print(arr, sz);
  Bobblesort(arr, sz);
  printf("排序后:");
  print(arr, sz);
  return 0;
}


✅运行结果:


5d6e7ee897967f14dc1844f684194504_cd6e3306212a4241ac566f7f783ffe92.png


🥝降序代码:


#include <stdio.h>
//冒泡排序(降序)
void Bobblesort(int* arr, int n)
{
    assert(arr); 
  int pos = 1;//为了提高效率,增加一个判断,假设整个数据已经有序
  for (int i = 0; i < n; i++)//控制遍历的趟数
  {
  for (int j = 0; j < n - i - 1; j++)//控制每一趟比较的次数
  {
    if (arr[j] < arr[j + 1])
    {
    pos = 0;//存在交换情况,则证明这组数据还有可能乱序,修改POS的值为假
    int tmp = arr[j]; //设置中间变量tmp记录要交换的其中一个数据
    arr[j] = arr[j + 1];
    arr[j + 1] = tmp;
    }
  }
  if (pos)//当数据已经有序则提前退出
    break;
  }
}
//打印数据
void print(int arr[], int n)
{
  for (int i = 0; i < n; i++)
  {
  printf("%d ", arr[i]);
  }
  printf("\n");
}
//测试函数正确性
int main()
{
  int arr[10] = { 2,3,5,1,6,9,0,4,7,8 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  printf("排序前:");
  print(arr, sz);
  Bobblesort(arr, sz);
  printf("排序后:");
  print(arr, sz);
  return 0;
}

✅运行结果:

image.png


目录
相关文章
|
2月前
|
算法 搜索推荐 C语言
【C语言】冒泡排序+优化版
【C语言】冒泡排序+优化版
|
2月前
|
C语言
【c语言】qsort函数及泛型冒泡排序的模拟实现
本文介绍了C语言中的`qsort`函数及其背后的回调函数概念。`qsort`函数用于对任意类型的数据进行排序,其核心在于通过函数指针调用用户自定义的比较函数。文章还详细讲解了如何实现一个泛型冒泡排序,包括比较函数、交换函数和排序函数的编写,并展示了完整的代码示例。最后,通过实际运行验证了排序的正确性,展示了泛型编程的优势。
34 0
|
5月前
|
搜索推荐 C语言
C语言冒泡排序(附源码和动态图)
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素的值,如果它们的顺序错误(即满足一定的排序条件,如从小到大排序时前一个元素大于后一个元素),就交换它们的位置。这个过程就像水底的气泡一样逐渐向上冒,因此得名“冒泡排序”。
|
6月前
|
算法 搜索推荐 C语言
C语言冒泡排序介绍
C语言冒泡排序介绍
|
6月前
|
C语言
C语言----冒泡排序
C语言----冒泡排序
|
7月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
43 1
|
6月前
|
搜索推荐 前端开发 C语言
C语言探索:冒泡排序的实现与解读
C语言探索:冒泡排序的实现与解读
75 0
|
7月前
|
算法 C语言 C++
C语言进阶:冒泡排序函数初步实现
C语言进阶:冒泡排序函数初步实现
85 0
|
7月前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(上)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
43 0
|
7月前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
47 0