C语言实现冒泡排序

提示:本文仅是对个人学习经历的一个记录 

前言:

作为一个小白,关于我的学习经历,我想在此做一个记录。

本文关于用C语言实现冒泡排序。

PS:目前作者在学习C语言数组部分的内容,所以代码是基于C语言数组部分知识编写的。


一、什么是冒泡排序?

        冒泡排序是交换排序中一种简单的排序方法。

        基本思想:对所有相邻的元素进行比较,最终对所有元素进行正序或者逆序排列。

举个例子:有四个元素,初始排序是:12,8,13,9,对其进行从小到大排列

i = 0时,                                                             注:上图坐标(i,j)

第一次12和8进行比较,  12比8大,      进行交换,变成坐标(0,0)数据,

第二次12和13进行比较,12不比13大,不用交换,变成坐标(0,1)数据,

第三次13和9进行比较,  13比9大,      进行交换,变成坐标(0,2)数据,得最大值13。

i =  1时 ,

第一次8和12进行比较,   8不比12大, 不用交换,变成坐标(1,0)数据,

第二次12和9进行比较,   12比9大,     进行交换,变成坐标(1,1)数据,得第二大值12。

i =  2时,

第一次8和9进行比较,      8不比9大,   不用交换,变成坐标(2,0)数据,得第三大值9和最小值8。

实现从小到大排列:8,9,12,13

二、实现步骤

这里写一段用冒泡法实现从大到小输出的程序。

1、代码如下:

#include <stdio.h>
/*
    author: 		 nopd
	data: 			 2023.01.13
    funDescription:	 bubble sort  */
	
int main()
{
	int i;
	int j;
	int tmp;
	int array[] = {451,65,48,1,3,75};
	int arraylen = sizeof(array)/sizeof(array[0]);
	
	puts("原始数据:");
	for(i=0;i<arraylen;i++){
		printf("%d ",array[i]);
	}
	putchar('\n');
	
	//冒泡排序
	for(i=0;i<arraylen-1;i++){
		for(j=0;j<arraylen-1-i;j++){
			if( array[j]<array[j+1]){
				tmp = array[j];
				array[j] = array[j+1];
				array[j+1] = tmp;
			}
		}
	}
	puts("冒泡排序法输出(从大到小):");
	for(i=0;i<arraylen;i++){
		printf("%d ",array[i]);
	}
	puts("\ndone");
	
	return 0;
}

2、运行结果:

 要想实现从小到大只需要把 if 语句的结束条件改成如下:

if( array[j]>array[j+1])//把大数往后移

三、代码解析 

1、初始化一个数组array

int array[] = {451,65,48,1,3,75};

2、sizeof关键字计算数组元素个数,定义一个整形变量arraylen用来存放数组元素的个数

int arraylen = sizeof(array)/sizeof(array[0]);

计算方法:用整个数组的大小除以数组内一个元素的大小得到数组元素个数

3、输出初始数组

4、进行冒泡排序

        外层for循环控制轮数,一共进行了(arraylen-1)轮,

        内层for循环控制两两比较,每轮只要比较(arraylen-1-i)次,

        结合上面举得例子可以很容易理解。

PS:C语言数组下标访问从0开始,例子中4个数进行了三轮比较故i =  0,1,2

        每轮两两比较了  4 - 1 - i 次

        所以外层循环结束条件( i <arraylen-1),内层循环结束条件(arraylen-1-i)

5、输出排序后结果 


总结:

以上就是今天要讲的内容,本文仅仅简单介绍了基于C语言中数组部分的知识实现冒泡排序。

对我而言,这是我的第一篇文章,如有错漏,望批评指正。让我们共同进步吧!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值