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

不引入变量 异或交换的缺点

文章目录

  • 选择排序正确代码
  • 交换两个数位置的方法
    • 引入中间变量
    • 不引入中间变量,使用异或的方法
    • 错误原因
    • 优化代码

选择排序正确代码


// 数组中交换i和j位置的数public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}// 选择排序//选择待排数据中最小的,与数组最左侧的数据进行交换public static void selectionSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int minIndex, i = 0; i < arr.length - 1; i++) {minIndex = i;//因为每一次都会排好前面的位置,所以每次 都要重新给minIndex赋值; 然后数组剩余数字进行遍历,找出最小值然后交换for (int j = i + 1; j < arr.length; j++) {//当 j = i 时,会无意义地比较 arr[i] 和 arr[minIndex](此时 minIndex = i),即 arr[i] 和自己比。if (arr[j] < arr[minIndex]) {minIndex = j;}}swap(arr, i, minIndex);}}

交换两个数位置的方法

引入中间变量

正确,可以使用

    public static void swap(int[] arr,int i,int j){int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}

不引入中间变量,使用异或的方法

这种方法有问题不能使用!!

public static void swap(int[] arr,int i,int j){arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}

错误原因

异或交换不能处理i == j的情况,会导致数据被错误地置 0。
加入arrr[1] = 5;
因此使用时 我们推荐先判断两数是否相等
在这里插入图片描述

优化代码

在这里插入图片描述

http://www.dtcms.com/a/264723.html

相关文章:

  • 替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用
  • openai-agents记忆持久化(neo4j)
  • WPF学习笔记(21)ListBox、ListView与控件模板
  • 深入理解 LoRA:大语言模型微调的低秩魔法
  • PyTorch 不支持旧GPU的异常状态与解决方案:CUDNN_STATUS_NOT_SUPPORTED_ARCH_MISMATCH
  • Spring Boot 高并发框架实现方案:数字城市的奇妙之旅
  • 智能物流革命:Spring Boot+AI实现最优配送路径规划
  • Knife4j+Axios+Redis:前后端分离架构下的 API 管理与会话方案
  • 【Java关系映射入门】实战一
  • gin如何返回html
  • Java面试宝典:集合一
  • 生僻字写入oracle后被转为??
  • (一)大语言模型的关键技术<-AI大模型构建
  • 在浏览器输入url,会发送什么事情?
  • HMAC 介绍
  • 在 VMware虚拟机中使用 NAT 网络模式
  • Git 怎么判断是否冲突?
  • Active Directory 环境下 Linux Samba 文件共享服务建设方案
  • OpenLayers 入门指南:序言
  • Javaweb - 8 Tomcat10
  • 大数据开发实战:如何做企业级的数据服务产品
  • 应急响应靶机-近源OS-1-知攻善防实验室
  • 学习C++、QT---16(C++的接口、属于QT的第一个项目的启动)
  • ACE2018 创建图框
  • 机器学习实战:决策树算法详解
  • Claude 4 与 Gemini 2.5 Pro:开发者深度比较
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • 【科研绘图系列】基于R语言的种质资源评分可视化教程:条形图与地理分布图
  • app自动化测试工具 ️哪些?
  • IO--进程实操