冒泡排序

文章目录

  • 冒泡排序
    • 排序算法的介绍
    • 排序的分类
      • (1)内部排序:
      • (2)外部排序法:
    • 【重点】冒泡排序
      • 1.基本介绍
      • 2.冒泡排序应用实例
      • 3.分析冒泡的过程+代码

排序算法的介绍

排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。

排序的分类

(1)内部排序:

指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。

(2)外部排序法:

数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。

【重点】冒泡排序

1.基本介绍

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐 向上冒。

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。

2.冒泡排序应用实例

将五个无序的数:{3, 9, -1, 10, -2},使用冒泡排序法将其排成一个从小到大的有序数列。

3.分析冒泡的过程+代码

代码实现:

#include <stdio.h>
int main(){int arr[] = {3,9,-1,10,-2};//第一轮排序int j;int t;//临时变量for(j=0;j<4;j++){//如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}//输出看看第一轮的排序后的情况for(j=0;j<5;j++){printf(" %d",arr[j]);    }printf("\n");//第二轮排序for(j=0;j<3;j++){//如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}//输出看看第二轮的排序后的情况for(j=0;j<5;j++){printf(" %d",arr[j]); }printf("\n");//第三轮排序for(j=0;j<2;j++){//如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}//输出看看第三轮的排序后的情况for(j=0;j<5;j++){printf(" %d",arr[j]); }printf("\n");//第四轮排序for(j=0;j<1;j++){//如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}//输出看看第四轮的排序后的情况for(j=0;j<5;j++){printf(" %d",arr[j]); }return 0;
}

因为每轮排序几乎一样,因此我们可以使用for循环来处理,进行精简代码,同时定义一下数组大小的变量,arrLen,让代码更灵活

#include <stdio.h>
int main(){int arr[] = {3,9,-1,10,-2};//因为每轮排序几乎一样,因此,我们可以使用for循环处理//第一轮排序int j,i;int t;//临时变量int arrLen = sizeof(arr) / sizeof(int); // 5 数组大小for(i=0;i<arrLen-1;i++){for(j=0;j<arrLen-1-i;j++){       //如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}//输出看看第一轮的排序后的情况for(j=0;j<arrLen;j++){printf(" %d",arr[j]);  }printf("\n");    }return 0;
}

因为每次重复写代码太过麻烦,可以将上述代码封装成冒泡排序的函数:

#include <stdio.h>
//冒泡排序的函数
void bubbleSort(int arr[],  int arrLen){int j,i;int t;//临时变量    //因为每轮排序几乎一样,因此,我们可以使用for循环处理for(i=0;i<arrLen-1;i++){for(j=0;j<arrLen-1-i;j++){       //如果前面的数大于的后面的数,就交换if(arr[j]>arr[j+1]){t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}} }
}int main(){int j;int arr[] = {3,9,-1,10,-2};int arrLen = sizeof(arr) / sizeof(int); // 5 数组大小bubbleSort(arr,arrLen);//数组默认是地址传递 (指针)printf("\n排序后(函数)\n");for(j=0;j<arrLen;j++){printf(" %d",arr[j]);  }return 0;
}

C语言——冒泡排序(分析详解)相关推荐

  1. R语言生存分析详解:KM曲线、COX比例风险模型、HR值解读、模型比较、残差分析、是否比例风险验证:基于survival包lung数据集

    R语言生存分析详解:KM曲线.COX比例风险模型.HR值解读.模型比较.残差分析.是否比例风险验证:基于survival包lung数据集 目录

  2. c语言冒泡排序(c语言冒泡排序法详解)

    请讲解下C语言的冒泡排序法 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样 ...

  3. c语言—冒泡排序(详解)

    目录 一.了解冒泡排序 二.冒泡排序的实现 字符数组 算法实现 一.了解冒泡排序 冒泡排序(Bubble Sort):相比起二分法查找只能应用于有序数列,冒泡排序可以将无序数列变为有序数列:冒泡排序, ...

  4. 冒泡排序算法,C语言冒泡排序算法详解

    冒泡排序是最简单的排序方法,理解起来容易.虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握. 冒泡排序的原理是:从左到右,相邻元素进行比较.每次比较一轮,就会找到序列中最大的一个或 ...

  5. C语言冒泡排序法详解

    1)基本思路 每次将相邻的两个数比较,将小的调在前面 例:现在有6个数:9,8,5,4,2,0.第一次先将最前面的两个数9和8对调.第二次将第2个数和第3个数对调(9和5)······如此共进行5次得 ...

  6. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据

    R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录

  7. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  8. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  9. HTTP协议版本介绍以及使用Wireshark工具针对HTTP进行抓包分析详解

    一.http协议版本介绍 http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于Web服务.通过计算机处理文本信息,格式为HT ...

最新文章

  1. 微生物组-扩增子16S分析研讨会(2020.1)
  2. 对3维数组中间一维进行操示例
  3. mysql 查看innodb版本,mysql中查看innodb版本的方法
  4. 双11的前奏,电商正在用诺贝尔经济学奖的理论等你下锅
  5. framework dyld: Symbol not found: _OBJC_CLASS_xxx
  6. 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(11)
  7. .NET Core开发实战(第9课:命令行配置提供程序)--学习笔记
  8. 【HDU1325】Is It A Tree?(并查集基础题)
  9. oracle的cols,Oraclecols_as_rows比对数据
  10. python动态心形代码_父亲节,程序员几条代码硬核示爱
  11. linux 文件上传扫描_SecureCRT实现windows与linux文件上传下载
  12. gitlab创建分支上传文件_环境搭建:gitLab平台的搭建和简单使用
  13. Java并发编程:Lock(下)
  14. python爬取周杰伦歌词_Python 爬取周杰伦 instagram
  15. chrome插件之网页翻译插件
  16. u盘中毒文件为html文档,U盘u盘中毒,文件被隐藏了怎么办 – 手机爱问
  17. 手把手教你写保研简历|计算机保研|保研夏令营文书写作|简历模板
  18. java interop,服务器程序的Xamarin-Java.Interop体验(一)
  19. 总线Bus是什么意思
  20. 默纳克调试说明书_默纳克NICE调试说明书修改版

热门文章

  1. C++学到什么程度可以找工作?
  2. h2 使用liquibase的changelog表格创建不成功
  3. win10 运行debug程序
  4. 使用GitHub Actions通过CI提高代码质量
  5. ISA SERVER常见问题总结专用贴(转)
  6. COLA开发流程总结
  7. C语言-返回数组并输出其值
  8. Linux下的Curses库的下载与安装
  9. Android 面试必备 - 系统、App、Activity 启动过程
  10. c语言中3%3e2%3e1的值,Javascript中的空数组值