C语言——冒泡排序(分析详解)
冒泡排序
文章目录
- 冒泡排序
- 排序算法的介绍
- 排序的分类
- (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语言——冒泡排序(分析详解)相关推荐
- R语言生存分析详解:KM曲线、COX比例风险模型、HR值解读、模型比较、残差分析、是否比例风险验证:基于survival包lung数据集
R语言生存分析详解:KM曲线.COX比例风险模型.HR值解读.模型比较.残差分析.是否比例风险验证:基于survival包lung数据集 目录
- c语言冒泡排序(c语言冒泡排序法详解)
请讲解下C语言的冒泡排序法 冒泡法,就是通过多次循环排序的一种方法. 第一次循环,让最小(最大)的值浮到第一位, 第二次循环,让剩余的数字中最小(最大)浮到第二位 依次类推. 这种方法就像水泡上浮一样 ...
- c语言—冒泡排序(详解)
目录 一.了解冒泡排序 二.冒泡排序的实现 字符数组 算法实现 一.了解冒泡排序 冒泡排序(Bubble Sort):相比起二分法查找只能应用于有序数列,冒泡排序可以将无序数列变为有序数列:冒泡排序, ...
- 冒泡排序算法,C语言冒泡排序算法详解
冒泡排序是最简单的排序方法,理解起来容易.虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握. 冒泡排序的原理是:从左到右,相邻元素进行比较.每次比较一轮,就会找到序列中最大的一个或 ...
- C语言冒泡排序法详解
1)基本思路 每次将相邻的两个数比较,将小的调在前面 例:现在有6个数:9,8,5,4,2,0.第一次先将最前面的两个数9和8对调.第二次将第2个数和第3个数对调(9和5)······如此共进行5次得 ...
- R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据
R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录
- 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序
[排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
- HTTP协议版本介绍以及使用Wireshark工具针对HTTP进行抓包分析详解
一.http协议版本介绍 http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于Web服务.通过计算机处理文本信息,格式为HT ...
最新文章
- 微生物组-扩增子16S分析研讨会(2020.1)
- 对3维数组中间一维进行操示例
- mysql 查看innodb版本,mysql中查看innodb版本的方法
- 双11的前奏,电商正在用诺贝尔经济学奖的理论等你下锅
- framework dyld: Symbol not found: _OBJC_CLASS_xxx
- 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(11)
- .NET Core开发实战(第9课:命令行配置提供程序)--学习笔记
- 【HDU1325】Is It A Tree?(并查集基础题)
- oracle的cols,Oraclecols_as_rows比对数据
- python动态心形代码_父亲节,程序员几条代码硬核示爱
- linux 文件上传扫描_SecureCRT实现windows与linux文件上传下载
- gitlab创建分支上传文件_环境搭建:gitLab平台的搭建和简单使用
- Java并发编程:Lock(下)
- python爬取周杰伦歌词_Python 爬取周杰伦 instagram
- chrome插件之网页翻译插件
- u盘中毒文件为html文档,U盘u盘中毒,文件被隐藏了怎么办 – 手机爱问
- 手把手教你写保研简历|计算机保研|保研夏令营文书写作|简历模板
- java interop,服务器程序的Xamarin-Java.Interop体验(一)
- 总线Bus是什么意思
- 默纳克调试说明书_默纳克NICE调试说明书修改版