当前位置: 首页 > article >正文

C语言实现冒泡排序

引入

我想大部分编程小白学的第一种排序算法都是冒泡排序吧,你还没弄懂?快来看看!!

源码

void input(int* p, int sz)
{
	for (int i = 0; i < sz - 1; i++)
	{
		scanf("%d ", p + i);
	}
}

void bubble_sort(int* p, int sz)
{
	for (int i = 0; i < sz; i++)
	{
		int flag = 1;
		for (int j = 0; j < sz - i - 1; j++)
		{
			if (p[j] > p[j + 1])
			{
				flag = 0;
				int tmp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = tmp;
			}
		}
		if (flag)
			break;
	}
}
void print(int *p, int sz)
{
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", p[i]);
	}
}
int main()
{
	int arr[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	input(arr, sz);

	bubble_sort(arr, sz);

	print(arr, sz);
	return 0;
}

解释

上面的代码我们封装了三个函数,我们需要重点关注的是bubble_sort
代码的核心思想就是,相邻元素之间进行比较,不符合预期就交换顺序,每完成一趟都会使得一个数字到达正确的位置,再通过两层嵌套的循环来达到目的。
我们再看两层循环的嵌套,外层循环决定了循环的躺输,内存循环则决定了元素之间比较的次数
以下是需要明确的点:

  • 外层循环的循环条件是元素个数减一,比方说有十个数据要进行排序,九个数据都排到正确的位置,那么剩下的一个一定也处在正确位置
  • 内层循环的循环条件是元素个数减去本次循环的趟数再减一,因为每次排完一个元素之后都不需要继续和这个排好的元素进行比较
  • 设置flag变量,相当于是冒泡排序的一个优化,比方说本身输入的数据就是理想的顺序,那么就只需要一次外层循环来确定顺序是正确的,flag的值如果没有被改变,那么说明本次循环没有数据之间的交换,那么直接就结束循环


http://www.kler.cn/news/316072.html

相关文章:

  • 在泰国旅游不会口语怎么办?求推荐翻译软件!!!
  • 网安新声 | 黎巴嫩BP机爆炸事件带来的安全新挑战与反思
  • 计算机毕业设计选题推荐-基于python+Django的全屋家具定制服务平台
  • Vue3实现类ChatGPT聊天式流式输出(vue-sse实现)
  • torch.embedding 报错 IndexError: index out of range in self
  • 数据结构之二叉树遍历
  • 【Linux系统编程】第二十一弹---进程的地址空间
  • 《概率论与数理统计》学渣笔记
  • uni-app功能 1. 实现点击置顶,滚动吸顶2.swiper一个轮播显示一个半内容且实现无缝滚动3.穿透修改uni-ui的样式
  • 美团测开OC!
  • 【论文串烧】多媒体推荐中的模态平衡学习 | 音视频语音识别中丢失导致的模态偏差对丢失视频帧鲁棒性的影响
  • erlang学习:Linux常用命令2
  • Github 2024-09-23 开源项目周报 Top15
  • Kubernetes集群架构、安装和配置全面指南
  • 目标检测-数据集
  • 【MySQL】获取最近7天和最近14天的订单数量,使用MySQL详细写出,使用不同的方法
  • 想学习下Python和深度学习,Python需要学习到什么程度呢?
  • C++入门——(类的默认成员函数)析构函数
  • 数据库基础知识---------------------------(3)
  • 早期病毒和反病毒技术(网络安全小知识)
  • MATLAB系列08:输入/输入函数
  • SSCMS 插件示例 一插件创建及插件菜单
  • 大厂面试真题:SpringBoot的核心注解
  • FastAPI 的隐藏宝石:自动生成 TypeScript 客户端
  • Golang | Leetcode Golang题解之第423题从英文中重建数字
  • C++学习
  • 机器学习——Bagging
  • String类和String类常用方法
  • LinuxC高级作业1
  • css边框修饰