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

 更新时间:2021年09月16日 09:46:30   作者:飞人01_01  
冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的,初学者一定要掌握。本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值

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语言 冒泡排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实例真题讲解数据结构中单向环形链表

    C语言实例真题讲解数据结构中单向环形链表

    链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础。链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻。在维护一组数据集合时,就可以使用链表,这一点和数组很相似
    2022-04-04
  • 用C语言判断字符是否为空白字符或特殊字符的方法

    用C语言判断字符是否为空白字符或特殊字符的方法

    这篇文章主要介绍了用C语言判断字符是否为空白字符或特殊字符的方法,分别为isspace()函数的使用和ispunct()函数的使用,需要的朋友可以参考下
    2015-08-08
  • C语言数据结构之模式匹配字符串定位问题

    C语言数据结构之模式匹配字符串定位问题

    这篇文章主要介绍了C语言数据结构之模式匹配字符串定位问题的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • 详解C语言之操作符

    详解C语言之操作符

    这篇文章主要以图文结合的方式为大家详细介绍了C语言的操作符知识,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-11-11
  • c++素数筛选法

    c++素数筛选法

    本文讲的是筛选法的C++实现, 筛选法又称筛法,是求不超过自然数N(N&gt;1)的所有质数的一种方法。据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。
    2017-05-05
  • C/C++实现控制台输出不同颜色字体的方法

    C/C++实现控制台输出不同颜色字体的方法

    这篇文章主要介绍了C/C++实现控制台输出不同颜色字体的方法,涉及C++控制台文字属性相关设置操作技巧,需要的朋友可以参考下
    2017-09-09
  • 利用boost获取时间并格式化的方法

    利用boost获取时间并格式化的方法

    下面小编就为大家带来一篇利用boost获取时间并格式化的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C语言模拟实现字符串库函数的示例讲解

    C语言模拟实现字符串库函数的示例讲解

    这篇文章主要为大家详细介绍了C语言模拟实现字符串库函数的具体方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • C语言找出数组中的特定元素的算法解析

    C语言找出数组中的特定元素的算法解析

    这篇文章主要介绍了C语言中找出数组中特定元素的算法解析,包括找出数组中两个只出现一次的数字的方法,需要的朋友可以参考下
    2016-03-03
  • C++11的for循环的新用法(推荐)

    C++11的for循环的新用法(推荐)

    C++11这次的更新带来了令很多C++程序员期待已久的for range循环,每次看到javascript, lua里的for range,心想要是C++能有多好,心里别提多酸了。这次C++11不负众望,再也不用羡慕别家人的for range了。下面看下C++11的for循环的新用法
    2021-11-11

最新评论