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

【冒泡排序及其优化】

冒泡排序及其优化

冒泡排序核心思想

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较

1题目举例

给出一个倒序数组:arr[10]={9,8,7,6,5,4,3,2,1,0}
请排序按小到大输出

1.1题目分析

这是一个完全倒序的数组,所以确定冒泡排序的趟数,就是需要九趟冒泡排序

1.2冒泡排序函数实现

//冒泡排序函数
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{//确定冒泡排序趟数int i = 0;for (i = 0; i < sz - 1; i++){//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;}}}
}

1.3打印数组函数实现

//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}

1.4完整代码实际代入实现

#include<stdio.h>
//冒泡排序
//冒泡排序函数
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{//确定冒泡排序趟数int i = 0;for (i = 0; i < sz - 1; i++){//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;}}}
}
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
int main()
{int arr[] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);print(arr, sz);return 0;
}

1.5运行结果展示

在这里插入图片描述

2.题目举例

假设给出一个极端数组arr[10]={9,0,1,2,3,4,5,6,7,8}
给他排序,按小到大输出

2.1题目分析

我们观察题目就会发现,这个数组只需1趟冒泡排序就会完成排序要求,但是,如果我们依旧使用上面那个冒泡排序的代码,他就会任然在一趟排好的情况下,继续两两比较,这样,就会大大浪费时间,所以我们就可以对以上冒泡排序代码进行优化。

2.2冒泡排序函数优化实现

//冒泡排序函数优化
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{//确定冒泡排序趟数int i = 0;for (i = 0; i < sz - 1; i++){int flag = 1;//假设数组是有序的//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;flag = 0;//不是有序}}if (flag == 1)//如果已经有序,就跳出循环{break;}}
}

2.3打印数组函数实现

//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}

2.4完整代码优化实际代入实现

//冒泡排序优化
//冒泡排序函数优化
void bubble_sort(int* arr, int sz)//参数接收数组元素个数
{//确定冒泡排序趟数int i = 0;for (i = 0; i < sz - 1; i++){int flag = 1;//假设数组是有序的//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++)//确定交换的对数{if (*(arr + j) > *(arr + j + 1)){//交换int temp = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = temp;flag = 0;//不是有序}}if (flag == 1)//如果已经有序,就跳出循环{break;}}
}
//打印数组函数
void print(int* arr, int sz)
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(arr++));}
}
int main()
{int arr[] = { 9,0,1,2,3,4,5,6,7,8 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);print(arr, sz);return 0;
}

2.5运行结果展示

在这里插入图片描述

http://www.lryc.cn/news/124414.html

相关文章:

  • TypeScript 泛型的深入解析与基本使用
  • 【Terraform学习】保护敏感变量(Terraform配置语言学习)
  • 海国图志#1:这一周难忘瞬间,吐血整理,不得不看
  • 【Android】okhttp爆java.lang.IllegalStateException: closed的解决方法
  • Django之定时任务--apscheduler
  • Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)
  • HBuilderX
  • C数据结构与算法——常见排序算法时间复杂度比较 应用
  • C++并发多线程--死锁问题及解决方法
  • 【Spring】纯注解开发
  • 【算法心得】正确估计dfs时间复杂度;剪枝优化不怕重构
  • 通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)
  • div输入框的文字超过指定行数用省略号表示css
  • STM32 F103C8T6学习笔记5:定时器输出不同占空比PWM驱动舵机旋转角度
  • 液体神经网络:LNN是个啥概念?
  • 开源数据库Mysql_DBA运维实战 (DCL/日志)
  • 神经网络基础-神经网络补充概念-03-逻辑回归损失函数
  • 基于深度信念神经网络的矿石产量预测,基于DBN的矿石产量预测,DBN的详细原理
  • JavaWeb-Filter过滤器
  • python如何实现1ms内触发两个接口请求
  • 深入解析路由与网络:网络的脉络
  • spring.HttpMessageNotReadableException: JSON parse error
  • 安全中间件的设计思路和简单实践
  • 试卷扫描成电子版方法分享,这个方法不要错过
  • 【PostgreSQL的CLOG解析】
  • 腾讯云国际站代充-阿里云ECS怎么一键迁移到腾讯云cvm?
  • 东方晶源亮相第十一届半导体设备年会,共话发展“芯”机遇
  • git修改历史commit信息
  • 基于K8S环境部署Dolphinscheduler及简单应用
  • Linux的ln命令