首页 > 编程语言 >【排序算法】冒泡排序法(C语言)——轻松拿下!

【排序算法】冒泡排序法(C语言)——轻松拿下!

时间:2023-10-26 18:01:03浏览次数:47  
标签:temp int 蓝墨水 交换 冒泡排序 C语言 瓶子 str 排序



文章目录

  • 一、冒泡排序的原理
  • 1.1算法思维:
  • 1.2动态图演示:
  • 二、实例讲解
  • 2.1图解冒泡:
  • 第一趟:
  • 第二趟
  • 第三趟
  • 第四趟
  • 三、代码讲解
  • 3.1定义变量:
  • 3.2使用双重循环
  • 3.3比较
  • 3.4红蓝墨水交换
  • 3.5遍历输出
  • 代码示例:
  • 四、总结


一、冒泡排序的原理

冒泡排序是一种简单的排序算法,它也是一种稳定的排序方法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。

1.1算法思维:

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。

1.2动态图演示:

【排序算法】冒泡排序法(C语言)——轻松拿下!_冒泡排序

二、实例讲解

N个数字要排序完成,要走N-1趟,每一趟的排序次数为(N-1-i)次。使用双重循环,外层循环控制循环多少趟,内层循环控制每一趟的循环次数。

2.1图解冒泡:

示例:有一组待排序序列(5,1,4,2,8)
5个数,(N-1)=4,即要走4趟。

第一趟:

第一趟(N-1-i)=4,即这一趟要比较4次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值8,第一趟结束。

【排序算法】冒泡排序法(C语言)——轻松拿下!_排序算法_02


第二趟

第二趟(N-1-i)=3,即这一趟要比较3次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值5,第二趟结束。

【排序算法】冒泡排序法(C语言)——轻松拿下!_c语言_03


第三趟

第三趟(N-1-i)=2,即这一趟要比较2次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值4,第三趟结束。

【排序算法】冒泡排序法(C语言)——轻松拿下!_排序算法_04


第四趟

第四趟(N-1-i)=1,即这一趟要比较1次。依次比较每一对相邻的元素,把顺序不对的进行交换,整个过程如下图。这一趟走完后,最终找到最大值2,第四趟结束。

【排序算法】冒泡排序法(C语言)——轻松拿下!_算法_05


最终成功运用冒泡排序把一组乱序的序列排成有序


三、代码讲解

3.1定义变量:

  • 定义一个数组str[],有数据(5,1,4,2,8).
  • 定义一个“空瓶子”
int str[]={5,1,4,2,8};
int temp;//定义一个“空瓶子”

3.2使用双重循环

  • 外层循环控制循环多少趟
  • 内层循环控制每一趟的循环次数
for(int i=0;i<5;i++)外层循环控制循环多少趟
for(int j=0;j<5-1-i;j++)//内层循环控制每一趟的循环次数

3.3比较

if(str[j]>str[j+1])比较大小

3.4红蓝墨水交换

  • 交换——红蓝墨水交换
  • 先将红墨水倒入空瓶子temp,
  • 再将蓝墨水倒入装红墨水的瓶子里
  • 最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里
  • 完成红蓝墨水交换
temp=str[j];     //交换——红蓝墨水交换 
str[j]=str[j+1]; //先将红墨水倒入空瓶子temp, 
str[j+1]=temp;   //再将蓝墨水倒入装红墨水的瓶子里 
                 //最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里
                 //完成红蓝墨水交换

3.5遍历输出

  • 遍历数出序列
for(int i=0;i<5;i++){
    printf("%d",str[i]);//遍历数出序列
 }

代码示例:

#include<stdio.h>
int main()
{
	int str[]={5,1,4,2,8};
	int temp;//定义一个“空瓶子” 
	
	for(int i=0;i<5;i++)外层循环控制循环多少趟
	{
		for(int j=0;j<5-1-i;j++)//内层循环控制每一趟的循环次数
		{
			if(str[j]>str[j+1]){//比较大小
				temp=str[j];     //交换——红蓝墨水交换 
				str[j]=str[j+1]; //先将红墨水倒入空瓶子temp, 
				str[j+1]=temp;   //再将蓝墨水倒入装红墨水的瓶子里 
			}                    //最后再将temp瓶子里的墨水倒入装蓝墨水的瓶子里 
		}                        //完成红蓝墨水交换 
	}
	for(int i=0;i<5;i++)//遍历数出序列
	{
		printf("%d",str[i]);
	}
	
	return 0;
}

运行结果:

【排序算法】冒泡排序法(C语言)——轻松拿下!_排序算法_06

四、总结

冒泡排序思维:

【排序算法】冒泡排序法(C语言)——轻松拿下!_i++_07

  • 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤1~3,直到排序完成。


标签:temp,int,蓝墨水,交换,冒泡排序,C语言,瓶子,str,排序
From: https://blog.51cto.com/u_16312968/8042148

相关文章

  • MySQL建数据库排序规则选择
    MySQL建数据库排序规则选择引言在MySQL数据库中,选择适合的排序规则对于数据的存储和检索非常重要。排序规则决定了字符比较的方式,影响数据库的数据排序和查询结果。本文将介绍MySQL中常见的排序规则,并提供相应的代码示例来帮助读者理解和选择适合自己需求的排序规则。排序规则......
  • Java 练习题02 (包装类 (对字符串进行排序))
    有一个字符串“101,87,88,87,98”对数字由小到大排序。importjava.util.Arrays;publicclassDemo01{publicstaticvoidmain(String[]args){Stringspa="101,87,88,87,98";//1.分割每个数字String[]str=spa.split(",");//2.定义int类型数......
  • C语言字符串拷贝详解
    目录字符串拷贝strcpy函数strcpy_s函数字符串拷贝n个字符strncpy函数strncpy_s函数字符串拷贝字符串拷贝是将一个字符串的内容复制到另一个字符串中的操作。在C语言中,我们可以使用strcpy函数或strcpy_s函数来实现字符串拷贝。这两个函数的使用方法和区别如下:strcpy函......
  • 用C语言,两个数的最大公约数
    今天我们来了解下如何用C语言程序代码,求两个数的最大公约数。比较经典的算法就是使用辗转相除法,代码如下:程序运行结果如下:#include<stdio.h>intmain(){ intm=0;       //创建整型(int)的变量m,n来接收从键盘输入的值 intn=0; intr=0;     /......
  • c语言代码练习37
    问:在一个杨氏矩阵中查找某个数#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intAyue(intarr[3][3],intk,introw,intcol){intx=0;inty=col-1;while(x<row&&y>=0){if(arr[x][y]>k)......
  • [C语言]整数在内存中的存储
    1、......
  • c语言条件操作符的使用
    条件操作符--exp1?exp2:exp3exp1为真,执行exp2exp1为假,执行exp3取最大值intmain(){ inta=10; intb=20; intmax=0; max=(a>b?a:b); //if(a>b) // max=a; //else // max=b; printf("max=%d\n",max); return0;}......
  • C语言接口与实现: 创建可重用软件的技术 pdf电子版
    C语言接口与实现:创建可重用软件的技术pdf电子版作者: DavidR.Hanson原作名: CInterfacesandImplementations:TechniquesforCreatingReusableSoftware出版年: 2011-9ISBN: 9787115260314连接提取码:cnkx一度有点觉得是一本说数据结构的书,但其实不是(不是所有的例子......
  • 学习c语言的心得
    培养良好的编程习惯:C语言是一门底层语言,需要严谨的编码和规范的命名,特别是对于变量、函数和数据类型的命名,要清晰明了,易于理解和维护。同时,编写注释也是非常重要的,能够帮助自己和他人更好地理解代码逻辑。多实践多动手:学习C语言最好的办法就是多动手写代码,通过实践来巩固所学的知......
  • Mysql、Oracle 中将汉字(中文)按照拼音首字母排序
    Mysql 将汉字(中文)按照拼音首字母排序ORDERBYCONVERT(表别名.字段名USINGgbk)COLLATEgbk_chinese_ciASC;例子select*from(select'嘉实资产'a,'000830'bunionselect'中金鼎益稳健3号单一资产管理计划'a,'002544'bunionselect......