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

算法 class 004(选择,冒泡,插入)

选择排序:


刚进入 j 循环的样子

j 跳出循环后,b 指向最小值的坐标

然后交换 i 和 b 位置的 值

随后 i ++, b = i , i = j+1; 开始新一轮的排序,

void SelectAQort(int* arr,int size)//选择排序
{for (int i = 0; i < size-1; i++){	//i 的位置就是最小值应该放入的位置int b = i;//存储最小值下标,一开始默认是 ifor (int j = i+1; j < size;j++){if (arr[j] < arr[b])//随着j的变化{	//如果j下标的值比b下标还小的值b = j;//那么就将他赋值给 b }}//出了 j的循环,b指向的就是最小值的坐标,将 b 与 i 交换if (i == b)//处理i就是最小值的情况,continue;Swap(arr, i, b);//交换函数// 9,8,2,1,7,9,4,8,7,2,3,4 }
}

冒泡排序

以上图为例

第一次进入 j 循环

j 大于 j+1位置的数,8 和 3交换,j++ = 1;

j 大于 j+1位置的数,8 和 7交换,j++ = 2;

j 大于 j+1位置的数,8 和 4交换,j++ = 3;

j 不大于 j+1位置的数,不交换 单纯的 j++ = 4;

j 大于 j+1位置的数,9 和 5交换,j++ = 5;

j 大于 j+1位置的数,9 和 7交换,j++ = 6;

j 大于 j+1位置的数,9 和 2交换,j++ = 7;

j 大于 j+1位置的数,9 和 8交换,j++ = 8;

j 大于 j+1位置的数,9 和 4交换,j++ = 9;

j 不大于 j +1位置的数,不交换,j++ = 10;

j 大于 j+1位置的数,9 和 5交换,j++ = 11;

j 大于 j+1位置的数,9 和 7交换,j++ = 12;

j 不大于 j+1位置的数,不交换,j++ = 13

由与 j < i 所以加完之后 j 循环第一次结束

结束后 i 的位置就是最大值了

然后 i-- ,j 又重新来到 0 位置

新的循环,将是 j 遍历至 i -1的位置,i - 1的位置会得出新的最大值

i 最终的有效位 是 1

进入 i 是 1的循环

j = 0 ,j 与 j +1做比较,大于就交换然后跳出 j 的循环(j++会等于 i ,跳出),跳出 i 的循环(i -- 等于0,跳出),函数结束

如果不大于,直接跳出 j 的循环,然后跳出 i 的循环,与上面一样,只是少了一次交换。

插入排序

i 赋值 为 1 默认 1下标前面的数是有序的

j = i ,用 j 来实现插入,如果 j 小于 j -1,就交换,如果不小于,我们使用 j = 0,提前结束 j 循环。

以上图为例

j 与 j-1比较,j 不小于 j -1 ,j = 0,j循环第一次结束

i++ , j = i

j < j - 1,交换,然后 j--;

j > 0,继续判断,j 不小于 j - 1,j = 0; j循环第二次结束,

i++ , j = i;

我们的 i 前面的数都是有序的,所以,如果j 第一次判断就不小于 j - 1,,我们就可以使 j = 0,提前结束循环。

小于我们就一直往前找,如果 i 指向的数是当前最小值,在 j = 1时,j 与 j - 1,交换完后 ,

j-- = 0,会自己跳出循环,

如果在往前找的过程中有一次没有交换, 就用 j = 0;提前结束

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

相关文章:

  • linux---awk命令详细教程
  • 一个通用的居于 OAuth2的API集成方案
  • STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
  • QML学习(五) 做出第一个简单的应用程序
  • 深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
  • 【C++11】类型分类、引用折叠、完美转发
  • mongodb(6.0.15)安装注意事项,重装系统后数据恢复
  • union的实际使用
  • EKF 自动匹配维度 MATLAB代码
  • Oracle复合索引规则指南
  • JS - Array Api
  • 【JS】for-in 和 for-of遍历对象的区别
  • 【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
  • 深度学习blog- 数学基础(全是数学)
  • 最后100米配送
  • Linux的进程替换以及基础IO
  • 《计算机网络A》单选题-复习题库
  • 闲谭Scala(2)--安装与环境配置
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
  • Python 中的 with open:文件操作的最佳实践
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • AI 智能助手对话系统
  • 2024年秋词法分析作业(满分25分)
  • Docker镜像瘦身:从1.43G到22.4MB
  • 前端加解密对抗encrypt-labs
  • Android Notification 问题:Invalid notification (no valid small icon)
  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • ES中查询中参数的解析