冒泡排序-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


目录
相关文章
|
1月前
|
C语言
【C语言】拿捏冒泡排序(图解)
【C语言】拿捏冒泡排序(图解)
|
2月前
|
搜索推荐 算法 C语言
C语言:冒泡排序
C语言:冒泡排序
|
2月前
|
Java C语言
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
30 0
|
5天前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
12 0
|
16天前
|
C语言
C语言的冒泡排序
C语言的冒泡排序
17 0
|
1月前
|
搜索推荐 算法 C语言
【排序算法】C语言实现选择排序与冒泡排序
【排序算法】C语言实现选择排序与冒泡排序
|
1月前
|
算法 C语言
C语言之冒泡排序、快速排序法、希尔排序法
C语言之冒泡排序、快速排序法、希尔排序法
|
2月前
|
搜索推荐 算法 C语言
C语言实现冒泡排序算法
C语言实现冒泡排序算法
19 0
|
2月前
|
算法 C语言
用冒泡排序模拟C语言中的内置快排函数qsort!
用冒泡排序模拟C语言中的内置快排函数qsort!
|
2月前
|
搜索推荐 C语言
冒泡排序C语言,小白必看!只需1秒便可开挂
冒泡排序C语言,小白必看!只需1秒便可开挂