C语言实现冒泡排序的思路以及过程

目录
  • C语言实现<冒泡排序>
  • 整体思路
  • 代码实现

C语言实现<冒泡排序>

你们好!我是飞人!此篇文章是我进入IT行业第一篇博客,若有不妥之处,欢迎指点。
此篇讲解冒泡排序的原理,以及如何用C语言去实现。希望能够给各位读者带来一定的认识。

整体思路

例子:以一个整形数组为例

int arr[10]={1,2,3,4,5,6,7,8,9,10};

我们如何进行“降序”的排序方式??

确定躺数

总共需要排序10个数,而当我们实际去进行安排怎么去比较大小时,总共只组合了9对数据(即10-1对):“1与2”,“1与3”,“1与4”…“1与10”,这是第一趟排序,将‘1'从最前面的位置排到最后的位置。
第一趟排序之后,此时数组里面的内容是

int arr[10]={2,3,4,5,6,7,8,9,10,1};

'1'来到了数组的最后面。
此时我们就要进行第二个数字的排序,跟第一次‘1'的排序是一样的。但是此刻我们要考虑这一趟需要多少对数据???第一趟排序之后,‘1'已经来到了他该来到的位置,此时就不需要再对他进行排序,所以第二趟需要8对(即10-1-1对)…循环往复下去。
综上所诉,当我们要去排序n个数据时,总共就需要**(n-1)**趟排序。

躺数确定后,我们来捋清楚这一趟排序中,如何进行每个元素的交换。
我们都知道数组的下标是从0开始的。

我们在进行比较大小交换时,最先开始的就是下标为0和下标为1 的数据进行比较,如果前者小于后者,我们就进行交换。然后再进行下一对数据进行,那就是下标为1和下标为2 的进行比较…到最后下标为8和下标为9 的数据…
这就是一趟的排序,我们知道下一趟的数据是要减去已经排好的那个数据本身,即就是下标由原来的 0至9,到 0至8,再 0至7…
整体的思路我们捋清楚了,接下来就是如何去实现代码。接着往下看。

代码实现

```c
#include <stdio.h>
int main()
{
	//创建数组
	int arr[10]={1,2,3,4,5,6,7,8,9,10};
	//计算元素个数----整个数组的大小除去一个元素的大小,就是整个数组的大//小了,单位字节
	int sz=sizeof(arr)/sizeof(arr[0]);
	int i,j;//循环变量
	//当然,需要注意的就是  未初始化的局部变量,他是随机值
	//而全局变量未初始化,他默认是0

	for(i=0;i<sz;i++)  //这是躺数
	{
		for(j=0;j<sz-1-i;j++)  //这是一趟中需要交换的数据对数
		{
			//sz-1-i   就是随着躺数的增加,我们这一趟中需要交换的
			//数据就越来越少
			if(arr[j]<arr[j+1])
			{
				//创建临时变量,将其中一个数据就先进行保存
				int tmp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=tmp;
			}
		}
	}
	//这样我们就实现了冒泡排序的实现

	for(i=0;i<sz;i++)
		printf("%d ",arr[i]);
		//最后再打印出来

	return 0;
}

## 总结
当我们去学习冒泡排序的时候,最重要的是捋清楚上面我画的那幅图(虽然不好看,哈哈哈),当捋清楚冒泡排序他根本的逻辑后,再来实现代码,就轻松很多。
我呢,才疏学浅,我能够讲解的只有这些,见谅!如果还有什么疑问,我们评论区见。
后面呢,我会发一篇关于库函数qsort的使用,敬请期待!!!

到此这篇关于C语言实现冒泡排序的思路以及过程的文章就介绍到这了,更多相关C语言 冒泡排序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言冒泡排序法的实现(升序排序法)

    任务代码: 数字的排序: #include <stdio.h> #define SIZE 10 int main() { int a[SIZE]={12 ,43,9,13,67,98,101,89,3,35};//十个数的无序数列 int i,j,t; printf("此程序使用冒泡排序法排列无序数列!\n"); //冒泡排序 for(i=0;i<10-1;i++)//n个数的数列总共扫描n-1次 { for(j=0;j<10-i-1;j++)//每一趟扫描到a

  • 深入了解C语言冒泡排序优解

    目录 1:直接冒泡 2:函数冒泡 3:冒泡优化 总结: 1:直接冒泡 #include<stdio.h> int main() { int i,j; int t; int a[]={10,9,8,7,6,5,4,3,2,1};//此排序实现顺序排序 int s=sizeof(a)/sizeof(a[0]);//求数组元素个数 for(i=0;i<s-1;i++)//确定排序的趟数 { //下面为每趟冒泡排序 for(j=0;j<s-1-i;j++) { if(a[j]>a[j

  • C语言对数组元素进行冒泡排序的实现

    在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生: 一个保存了商品单价的数组,排序后更容易看出它们的性价比. 对数组元素进行排序的方法有很多种,比如冒泡排序.归并排序.选择排序.插入排序.快速排序等,其中最经典最需要掌握的是「冒泡排序」. 以从小到大排序为例,冒泡排序的整体思想是这样的: 从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素

  • C语言排序算法之冒泡排序实现方法【改进版】

    本文实例讲述了C语言排序算法之冒泡排序实现方法.分享给大家供大家参考,具体如下: 冒泡排序和改进的冒泡排序 /*------------------------------------------------------------------------------------------- Bubble_sort.h 冒泡排序: 时间复杂度为O(N^2) 改进的冒泡排序: 时间复杂度仍为O(N^2) 一般的冒泡排序方法有可能会在已经排好序的情况下继续比较,改进的冒泡排序 设置了一个哨兵fla

  • C语言实现冒泡排序的思路以及过程

    目录 C语言实现<冒泡排序> 整体思路 代码实现 C语言实现<冒泡排序> 你们好!我是飞人!此篇文章是我进入IT行业第一篇博客,若有不妥之处,欢迎指点. 此篇讲解冒泡排序的原理,以及如何用C语言去实现.希望能够给各位读者带来一定的认识. 整体思路 例子:以一个整形数组为例 int arr[10]={1,2,3,4,5,6,7,8,9,10}; 我们如何进行"降序"的排序方式?? 确定躺数 总共需要排序10个数,而当我们实际去进行安排怎么去比较大小时,总共只组合了

  • C语言三子棋的实现思路到过程详解

    目录 一.三子棋小游戏的简单介绍 二.三子棋的思路及代码实现 1.打印游戏菜单 2.选择是否开始游戏 3.创建并且初始化棋盘 3.1.创建棋盘 3.2.初始化棋盘 4.打印格式化棋盘 5.玩家下棋 6.电脑下棋 7.判断是否玩家或者电脑赢 三.整合三子棋游戏代码 game.h game.c test.c 一.三子棋小游戏的简单介绍 要说大家都很熟悉的一个小游戏,三子棋算是其中一个了.相信大家都玩过三子棋小游戏,在这里我还是给大家介绍简单的游戏规则: 一次只能下一个棋子: 玩家下完棋子后,电脑下棋

  • C语言实现冒泡排序算法的示例详解

    目录 1. 问题描述 2. 问题分析 3. 算法设计 动图演示 4. 程序设计 设计一 设计二 结论 5. 流程框架 6. 代码实现 7. 问题拓展 1. 问题描述 对N个整数(数据由键盘输入)进行升序排列. 2. 问题分析 对于N个数因其类型相同,我们可利用 数组 进行存储. 冒泡排序是在 两个相邻元素之间进行比较交换的过程将一个无序表变成有序表. 冒泡排序的思想:首先,从表头开始往后扫描数组,在扫描过程中逐对比较相邻两个元素的大小. 若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,

  • Go语言实现冒泡排序、选择排序、快速排序及插入排序的方法

    本文实例讲述了Go语言实现冒泡排序.选择排序.快速排序及插入排序的方法.分享给大家供大家参考.具体分析如下: 算法是程序的灵魂,而排序算法则是一种最基本的算法.排序算法有许多种,这里介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例. 一.冒泡排序 冒泡排序的原理是,对给定的数组进行多次遍历,每次均比较相邻的两个数,如果前一个比后一个大,则交换这两个数.经过第一次遍历之后,最大的数就在最右侧了:第二次遍历之后,第二大的数就在右数第二个位置了:以此类推. 复制代码 代码如下:

  • Vue实现登录记住账号密码功能的思路与过程

    目录 实现思路 这里有三种方法来存储账号密码: 功能界面 记住账号密码功能的具体实现 密码加密 localStorage cookies 总结 实现思路 用户登录时若勾选"记住我"功能选项,则将登录名和密码(加密后)保存至本地缓存中,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中. 这里有三种方法来存储账号密码: 1. sessionStorage(不推荐) 1). 仅在当前会话下有效,关闭浏览器窗口后就被清除了 2). 存放数据大小一般为5MB 3). 不

  • C语言中冒泡排序算法详解

    目录 一.算法描述 二.算法分析 三.完整代码 总结 一.算法描述 比较相邻两个元素,如果第一个比第二个大则交换两个值.遍历所有的元素,每一次都会将未排序序列中最大的元素放在后面.假设数组有 n 个元素,那么需要遍历 n - 1 次,因为剩下的一个元素一定是最小的,无需再遍历一次.因此需要两层循环,第一层是遍历次数,第二层是遍历未排序数组. 动图如下: 黄色部分表示已排好序的数组,蓝色部分表示未排序数组 核心代码如下: /** * @brief 冒泡排序 * * @param arr 待排序的数

  • C语言对冒泡排序进行升级介绍

    目录 一.补充一下关于void*指针的知识,易于我们对下列函数实现的理解 二.实现排序函数中的核心,比较函数 三.实现排序函数 四.转换函数的实现 总结 简单的冒牌排序只能对一中数组的类型进行排序,现在我们用冒泡排序为基础来改造出一个可以对任意数组排序的排序函数! 后面附有实现的源码! 首先我们以qsort函数为例慢慢分析,然后确定我们的排序函数如何增强,第一步我们从它的参数下手,它一共4个参数. 1.第一个参数类型是void*,qsort函数可以用来对任意类型的数组排序,用void *型指针可

  • C语言 图文并茂详解程序编译过程

    目录 一.初识编译器 二.程序被编译的过程 三.小结 一.初识编译器 编译器是一个广义的概念,真正的编译器由下面几个模块组成,真正的编译器是进行语法分析和语义分析的. 二.程序被编译的过程 如下,file.i 是中间代码,file.s 是一个汇编文件,file.o 是二进制文件. 预编译 处理所有的注释,以空格代替 将所有的 #define 删除,并且展开所有的宏定义 处理条件编译指令 #if, #ifdef, #elif,#else,#endif 处理 #include,展开被包含的文件 保留

  • Gorm更新零值问题解决思路与过程

    目录 一.前言 二.gorm更新记录常用方法 三.使用struct更新仅适用于非零值 一.前言 为方便描述教程例子,这里给出mysql表结构定义和golang结构体定义. 下面是教程用到的foods表结构定义: CREATE TABLE `foods` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id', `title` varchar(100) NOT NULL COMMENT '商品名', `price` float DEFAULT '

  • R语言作图之直方图histogram绘制过程详解

    先给大家介绍下R语言入门:直方图histogram的绘制,具体内容如下所示: 直方图和条形图最大的不同则是直方图可以用于显示出一个数据的频数,具有统计的作用,我们下面来看一一看直方图在R语言当中是如何绘制的吧! 首先创建一系列的数据: h<-c(4,6,3,46,3,5,7,8,3,4,3,4,5) 创建完之后将这个数据纳入到直方图histogram的绘制函数hist()当中,如下所示: hist(h,xlab = "number'scale",ylab="Right&

随机推荐