C语言排序算法之冒泡排序

简介: C语言排序算法之冒泡排序



1.冒泡排序概念

冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地交换相邻的元素,将较大的元素“冒泡”到数组的末尾。

2.冒泡排序图解

给定一个乱序数组7,1,9,5,2,6,4降序排列

首先要比较相邻两个元素的大小,然后如果满足前一个数大于后一个数则交换

第一趟

7>1,交换得1,7,9,5,2,6,4

第二次1,7,9,5,2,6,4

第三次1,7,5,9,2,6,4

.......

最后直到变为1,7,5,2,6,4,9

第二趟

直到1,5,2,6,4,7,9

以此类推

直到六趟后整个数组变为

1,2,4,5,6,7,9

至此数组有序且降序

根据以上,我们不难发现,一个长度为n的数组,最多经过n-1趟后,数组有序

每一趟最多排序n-1-i(趟数)次

3.代码示例

#include <stdio.h>
void bubblesort(int* arr, size_t n)
{
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n - i - 1; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        int tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
      }
    }
  }
}
void printarr(int* arr, size_t n)
{
  for (int i = 0; i < n; i++)
  {
    printf("%d ", arr[i]);
  }
}
int main()
{
  int arr[] = { 7,1,9,5,2,6,4 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  bubblesort(arr, sz);
  printarr(arr, sz);
}

运行结果

4.冒泡排序代码改进

当我给到一个数组9,0,1,2,3,4,5时我们可以发现其实循环只用走一趟,数组就能有序,大大减少运行时间,所以我们可以先让循环走一次把9放到最后,然后再走一次判断此时数组是否有序

代码示例

#include <stdio.h>
void bubblesort(int* arr, size_t n)
{
  int flag = 1;
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n - i - 1; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        int tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
        flag = 0;
      }
    }
    if (flag == 1)
      break;
  }
}
void printarr(int* arr, size_t n)
{
  for (int i = 0; i < n; i++)
  {
    printf("%d ", arr[i]);
  }
}
int main()
{
  int arr[] = { 9,0,1,2,3,4,5 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  bubblesort(arr, sz);
  printarr(arr, sz);
}

运行结果

相关文章
|
2月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
68 1
|
2月前
|
搜索推荐 Java
经典排序算法---冒泡排序
这篇文章详细介绍了冒泡排序算法的基本思想、比较轮数和次数,并提供了Java语言实现冒泡排序的代码示例,展示了如何通过相邻元素的比较和交换来达到排序的目的。
经典排序算法---冒泡排序
|
2月前
|
机器学习/深度学习 存储 并行计算
C语言与机器学习:K-近邻算法实现
C语言与机器学习:K-近邻算法实现
39 0
|
3月前
|
搜索推荐 C语言
C语言冒泡排序(附源码和动态图)
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素的值,如果它们的顺序错误(即满足一定的排序条件,如从小到大排序时前一个元素大于后一个元素),就交换它们的位置。这个过程就像水底的气泡一样逐渐向上冒,因此得名“冒泡排序”。
|
3月前
|
算法 PHP
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码
26 1
|
4月前
|
算法 C语言
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
C语言----判断n是否是2的次方数,利用到按位与&,算法n&(n-1)
|
4月前
|
算法 搜索推荐 C语言
C语言冒泡排序介绍
C语言冒泡排序介绍
|
4月前
|
存储 算法 搜索推荐
【数据结构和算法】--- 基于c语言排序算法的实现(2)
【数据结构和算法】--- 基于c语言排序算法的实现(2)
31 0
|
4月前
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
|
4月前
|
搜索推荐 算法 C语言
【数据结构和算法】--- 基于c语言排序算法的实现(1)
【数据结构和算法】--- 基于c语言排序算法的实现(1)
36 0
下一篇
无影云桌面