当前位置: 首页 > 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.lqws.cn/news/604657.html

相关文章:

  • 模板编译原理
  • OpenLayers 入门指南:序言
  • TEXT Submitting Solutions
  • SpringBoot中RocketMQ的使用教程
  • 记一次finallshell.exe打开无法应的处理
  • CKS-CN考试之路----13
  • 多项式带余除法——线性代数题目为例
  • react调用打印机自定义样式
  • mysql语句练习
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • React 学习(2)
  • Linux下MinIO分布式安装部署
  • 大语言模型随意猜测网址引发网络安全危机
  • 深入理解装饰器模式:动态扩展对象功能的灵活设计模式
  • 软考高项一次过,个人经验总结
  • Docker:容器化技术的基石与实践指南
  • 【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
  • MinHook 如何对 .NET 母体 CoreCLR 进行拦截
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】
  • 深入解析外观模式(Facade Pattern):简化复杂系统的优雅设计
  • Cursor推出全平台AI编程代理,Ultra订阅200美元/月,支持跨设备多任务
  • 123页满分PPT | 华为流程体系建设与运营华为数字化转型流程解决方案及建设案例
  • mars3d (基于 Cesium 的轻量化三维地图库)
  • 老版本 dubbo 泛化调用
  • MiniMind(2)模型架构
  • Java学习第五部分——API部分
  • docker离线/在线环境下安装elasticsearch
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • Gin 框架中的优雅退出
  • 智慧赋能高压并网:分布式光伏监控系统在5.88MW物流园项目的实践解析