三种排序和对数器

三种排序

选择排序

就是在数组选出最小的数放到第一个索引上,然后选出次最小的数放到第二个索引上,依此类推

:::info

5, 1 , 3 , 2 , 4

第一次从0~4索引选出最小的放到0索引 1, 5 , 3 , 2 , 4

第二次从1~4索引选出最小的放到1索引 1 ,2 , 5 , 3 , 4

第三次从2~4索引选出最小的放到2索引 1 ,2 , 3 , 5 , 4

第四次从3~4索引选出最小的放到3索引 1 ,2 , 3 , 4 , 5

简单的办法就是:你要讲要放到索引位置的数看成最小的,然后依次与其他索引的数进行比较,这样最小的数就会放到该索引的位置

:::

java 复制代码
for (int i = 0; i < arr.length - 1; i++) {
            for (int j = i + 1; j < arr.length ; j++) {
                if (arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }

            }
        }

冒泡排序

就是数组中相邻元素俩俩比较,小的排前面(升序)

:::info

5 , 1 , 3 , 2 , 4

第一次从0~4索引将相邻元素比较小的前 1 , 3 , 2 , 4 , 5

第二次从0~3索引将相邻元素比较小的前 1 ,2 , 3 , 4 , 5

第三次从0~2索引将相邻元素比较小的前 1 ,2 , 3 , 4 , 5

第四次从0~1索引将相邻元素比较小的前 1 ,2 , 3 , 4 , 5

相当于第一次将最大的放到最后

:::

java 复制代码
 for (int i = 1; i < arr.length; i++) {

            //0 1 2 3
            //让里面的数据俩俩比较,小的在前面
            for (int j = 0; j < arr.length - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

插入排序

先认为0~0索引是有序,在1索引插入一个数,然后这个数要是大于0索引的数就换位置,在2索引插入一个数,然后与1索引比较,要换位置在将1索引与2索引数进行比较,让其在插入之前变得有序

:::info

5, 1 , 3 , 2 , 4

假设第一个数有序 5 ,然后在其后面插入1这个数字变成

5,1,因为1 < 5,所以换位置变成1,5;然后在后面插入数字3,变成1,5,3,因为3 < 5,所以换位置变成1,3,5,然后3 > 1,所以不换位置,然后再插入下一个数,依次类推

:::

java 复制代码
//数组长度位N的话,会插入N-1个数,所以外层循环位N-1次
for (int i = 1; i < arr.length; i++) {
            //内循环 就是比较插入位置相邻的,往前比较,所以j变得越来越小
            for (int j = i - 1; j >= 0; j--) {
                if (arr[j + 1] < arr[j]){
                    int temp = arr[j+1];
                    arr[j +1] = arr[j];
                    arr[j] = temp;
                }
            }
        }

对数器

可以进行自我验证,也可以进行大量测试,也可以帮助自己找到错误等
实现:

  1. 你想要测的方法A(最优解)
  2. 实现复杂度不好但是容易实现的方法B(暴力解)
  3. 实现一个随机样本产生器(长度和值都随机)
  4. 将方法A和方法B跑相同的输入样本,看看得到的结果是否一样
  5. 如果有一个随机样本使得比对结果不一致,打印样本并自己进行分析,对方法进行改善
  6. 当样本数量很多时比对测试依然正确,可以确定方法A正确

注意:关键是第5步,找到一个数据量小的错误样本然后进行排查改善

相关推荐
用户9799848071812 小时前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法
threerocks12 小时前
【Muse实战】X 流量作战室搭建保姆级教程 - 拥有你自己的运营团队
算法
GreenTea12 小时前
深度拆解 ScienceBuddy:如何用“双层递归自进化”构建高可靠科研 Agent Harness
前端·后端·算法
花椒技术12 小时前
2.46 秒生成 5 秒视频:拆解 H3 Max 的模型、推理栈与硬件协同
算法·音视频开发·视频编码
vivo互联网技术12 小时前
ART:妆容迁移框架,重新定义高保真妆容迁移 | ECCV 2026
人工智能·算法·图像识别
用户04414409244912 小时前
卫星信号模拟器里的四个坐标转换公式
算法
橘和柠12 小时前
阿里 open-code-review (AI代码审查工具)实战:安装、四层规则链、自定义规则格式与实测避坑
算法·面试
得物技术12 小时前
别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?
人工智能·算法·llm
罗西的思考12 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(4)--- Rollout实现细节
人工智能·算法
罗西的思考12 小时前
机器人 / 物理 Agent Harness 综合分析与对比:从「更强的模型」到「更好的系统」
人工智能·算法·机器学习