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

简单排序算法

异或运算及异或运算实现的swap方法

^(异或): ^运算是计算机中的位运算,运算规则为相同为0,不同为1(也被称为无进位相加)。位运算处理效率比常规运算符效率更高。

异或运算遵循的法则:

  1.    0^N = N        N^N =0
  2.    异或运算遵循 结合律与交换律     

也就是说:a^a^b=b

swap方法的两种实现

常规交换(推荐)

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

^交换(前提要求是,arr[i]与arr[j]内存地址不同)

public 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];
} 

异或常见题

1.在一个数组中有一种数是奇数次,其他数都是偶数次如何找出奇数次这种数[1,2,2,1,1,1,3,3,3],奇数次数为3

思路:1.因为异或操作满足交换律所以数组可以写为 [1,1,1,1,2,2,3,3,3]

           2.异或的特性  1^1 = 0 ;1^0=1    所以偶数项就消掉了,只剩下一个奇数项了  

public void problem1(int[] arr){int eor = 0; // 0^i = i;for(int i:arr){eor ^= i;}System.out.println("奇数项的数为:"+eor);
}

2.在一个数组中有两种数是奇数次,其他数都是偶数次如何找出奇数次这种[1,2,2,1,4,4,1,4,1,3,3,3] 奇数次数为3,4

思路:1.数组所有数异或出来的结果肯定是 a^b 其中 a   b必定是奇数项

           2.因为a与b又不相等,所以a^b的结果在2进制上某一位也比不相等(值称为rightOne,rightOne 二进制表达为 0000 0100这种有规律的结构)

           3.将数组划分为两个空间,^rightOne的值被分为a所在区间或者b所在区间(根据结果等于1或者0判断),但是在这个区间里面只有a或者b 不存在a,b同时存在的情况。

           4.找到a   又知道a^b   所以 a^a^b = b  a、b两个结果都被求解出来了     

public void problem2(int[] arr){int eor = 0;for(int i:arr){eor ^=i;}int rightOne = eor & (~eor + 1);//a^b  源码与补码进行 &操作 结果为 最右边二进制不相等的位次    int resultA = 0;for(int i:arr){if(i^rightOne = 1){//区间划分resultA ^=i;  }}int resultB = eor^resultA;System.out.println("{"+resultA +","+resultB +"}"); }

选择排序

public int[] selectSort(int[] arr){for(int i = 0;i < arr.length-1;i++){ //该for循环保证在第i个位置上是[i,N]位置上的最小数int minIndex = i;for(int j = i+1;j < arr.length-1;j++){//保证当前位置为整个数组最小值minIndex = arr[i] > arr[j] ? j : minIndex;}swap(arr,i,minIndex);}
}
//交换方法
public void swap(int[] arr,int i,int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}

冒泡排序

public int[] bubbleSort(int[] arr){for(int i = arr.length-1;i > 0;i++){//确定数组最右边的元素最大for(int j = 0;j < i;j++){//对比数组中所有元素,一步步的将最大的元素移植最右边if(arr[j] > arr[j+1]){//对比相邻数的大小,进行交换swap(arr,j,j+1);}}}return arr;
}

插入排序

public int[] insertSort(int[] arr){for(int i = 1;i < arr.length;i++){//0-i位置上有序//向左判断数组大小,如果当前位置小于前一个位置进行交换for((int j = i-1;j >= 0 && arr[j] > arr[j+1];j--){swap(arr,j,j+1);}}}

对数器

        什么是对数器,对数器指的是在没有OJ平台(在线程序测评系统)时自测的一种方式。实现原理就是生成随机数据。例如:数组长度随机,数据随机的数组。将两套算法结果进行对比,如果全部相同说明算法正确。(其中一种算法是否正确未知,另一种算法为暴力解法这种容易想并且不会错的座位对比项)

package com.example.math;import java.util.Arrays;/*** @author geekYang* @version 1.0* @since 1.0*/
public class 对数器 {public static void main(String[] args) {int maxSize = 100;int maxValue = 100;int testTotal = 50000;//测试次数boolean succed = true;for (int i = 0; i < testTotal; i++) {int[] arr1 = generateRandomArr(maxSize, maxValue);int[] arr2 = Arrays.copyOf(arr1, arr1.length);comparator(arr1);insertSort(arr2);if (!Arrays.equals(arr1, arr2)) {succed = false;break;}}System.out.println(succed ? "Nice" : "Fucking fucked!");}//生成随机数组方法public static int[] generateRandomArr(int maxSize, int maxValue) {//(int) ((maxSize + 1) * Math.random()) 生成随机[0,maxSize]范围的数int[] arr = new int[(int) ((maxSize + 1) * Math.random())];for (int i : arr) {arr[i] = (int) ((maxSize + 1) * Math.random()) - (int) ((maxSize + 1) * Math.random());}return arr;}//对比方法public static int[] comparator(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length - 1; j++) {minIndex = arr[i] > arr[j] ? j : minIndex;swap(arr, j, minIndex);}}return arr;}//测试方法public static int[] insertSort(int[] arr) {for (int i = 1; i < arr.length - 1; i++) {for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {swap(arr, j, j + 1);}}return arr;}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}

本文章根据左程云老师课程进行总结反思

相关文章:

简单排序算法

异或运算及异或运算实现的swap方法 ^(异或): ^运算是计算机中的位运算&#xff0c;运算规则为相同为0&#xff0c;不同为1&#xff08;也被称为无进位相加&#xff09;。位运算处理效率比常规运算符效率更高。 异或运算遵循的法则&#xff1a; 0^N N N^N 0 异或运算…...

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…...

基于springboot+vue的校园二手物品交易系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

开发环境搭建-2:配置 python 运行环境(使用 uv 管理 python 项目)

在 WSL 环境中配置&#xff1a;WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 UV 介绍 uv软件官网&#xff08;github 需要梯子&#xff0c;没错这个软件的官网真就是 github 页面&#xff09;&#xff1a;https://github.com/astral-sh/uv 中文官网&#xff08;github 需要梯…...

STM32 ST7735 128*160

ST7735 接口和 STM32 SPI 引脚连接 ST7735 引脚功能描述STM32 引脚连接&#xff08;示例&#xff0c;使用 SPI1&#xff09;SCLSPI 时钟信号 (SCK)PA0(SPI1_SCK)SDASPI 数据信号 (MOSI)PA1 (SPI1_MOSI)RST复位信号 (Reset)PA2(GPIO 手动控制)DC数据/命令选择 (D/C)PA3 (GPIO 手…...

【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因

FFN&#xff08;前馈神经网络&#xff09;在Transformer模型中先升维再降维的设计具有多方面的重要原因&#xff0c;以下是对这些原因的总结&#xff1a; 1.目标与动机 高维映射空间&#xff1a;FFN的设计目的是通过一系列线性变换来拟合一个高维的映射空间&#xff0c;而不仅…...

VB读写ini配置文件将运行文件放入任务计划程序设置为开机自启动

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bWmhJZJ&ftt&id562957272162 Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpAppl…...

Java基础 (一)

基础概念及运算符、判断、循环 基础概念 关键字 数据类型 分为两种 基本数据类型 标识符 运算符 运算符 算术运算符 隐式转换 小 ------>>> 大 强制转换 字符串 拼接符号 字符 运算 自增自减运算符 ii赋值运算符 赋值运算符 包括 强制转换 关系运算符 逻辑运算符 …...

数据结构——实验六·散列表

嗨~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…...

springboot网上书城

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上书城管理系统的网络应用&#xff0c;在国外网上书城管理系统已经是很普遍的方式&#xff0c;不过国内的书城管理系统可能还处于起步阶段。网上书城管理系统具有网上…...

如何在 Pytest 中使用命令行界面和标记运行测试

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在前文你已经初步尝试编写了代码和单元测试&#xff0c;并且想要确保它能正常运行。…...

不建模,无代码,如何构建一个3D虚拟展厅?

在数字化浪潮的推动下&#xff0c;众多企业正积极探索线上3D虚拟展厅这一新型展示平台&#xff0c;旨在以更加生动、直观的方式呈现其产品、环境与综合实力。然而&#xff0c;构建一个既专业又吸引人的3D虚拟展厅并非易事&#xff0c;它不仅需要深厚的技术支持&#xff0c;还需…...

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…...

Unity Line Renderer Component入门

Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组&#xff0c;并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性&#xff1a;Line Renderer 绘制的线条…...

数据库的三级模式结构与两级映像

三级模式结构与两级映像 什么是数据库的三级模式结构&#xff1f;1. 模式&#xff08;Conceptual Schema&#xff0c;概念模式&#xff09;定义特点作用示例 2. 外模式&#xff08;External Schema&#xff0c;外部模式&#xff09;定义特点作用举例 3. 内模式&#xff08;Inte…...

TCP断开通信前的四次挥手(为啥不是三次?)

1.四次握手的过程 客户端A发送 FIN&#xff08;终止连接请求&#xff09; A&#xff1a;我要断开连接了&#xff08;FIN&#xff09;。A进入FIN_WAIT_1状态&#xff0c;表示请求断开&#xff0c;等待对方确认。 服务器B回复 ACK&#xff08;确认断开请求&#xff0c;但还未准备…...

win32汇编环境,按字节、双字等复制字符的操作

;运行效果 ;win32汇编环境,按字节、双字等复制字符的操作 ;这是汇编的优点之一。我们可以按字节、双字、四字、八字节等复制或挨个检查字符。 ;有时候&#xff0c;在接收到的一串信息中&#xff0c;比如访问网站时&#xff0c;返回的字串里&#xff0c;有很多0值存在&#xff0…...

.net 项目引用与 .NET Framework 项目引用之间的区别和相同

在 .NET 和 .NET Framework 项目中&#xff0c;引用其他库或项目的方式有一些区别和相同之处。以下是详细的对比&#xff1a; 相同点 引用目的&#xff1a; 目的&#xff1a;无论是 .NET 还是 .NET Framework 项目&#xff0c;引用其他库或项目的主要目的是为了使用这些库或项…...

RabbitMQ--延迟队列

&#xff08;一&#xff09;延迟队列 1.概念 延迟队列是一种特殊的队列&#xff0c;消息被发送后&#xff0c;消费者并不会立刻拿到消息&#xff0c;而是等待一段时间后&#xff0c;消费者才可以从这个队列中拿到消息进行消费 2.应用场景 延迟队列的应用场景很多&#xff0c;…...

使用pyboard、micropython和tja1050进行can通信

单片机和can收发器之间tx、rx不需要交叉接线&#xff01;&#xff01;&#xff01; tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置&#xff0c;本文使用的micropython1.…...

Qwen2.5-72B-Instruct-GPTQ-Int4惊艳效果:多语言混合输入+统一语义理解测试

Qwen2.5-72B-Instruct-GPTQ-Int4惊艳效果&#xff1a;多语言混合输入统一语义理解测试 1. 模型概述 Qwen2.5-72B-Instruct-GPTQ-Int4是Qwen大型语言模型系列的最新版本&#xff0c;代表了当前开源大模型领域的顶尖水平。这个经过GPTQ 4-bit量化的720亿参数指令调优模型&#…...

Qwen3.6-Plus 全面解析:性能提升、API 接入与 Claude Code 实战配置

点击下方“JavaEdge”&#xff0c;选择“设为星标”第一时间关注技术干货&#xff01;本文已收录在Github&#xff0c;关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01;&#x1f680; 魔都架构师 | 全网30W技术追随者&#x1f527; 大厂分布式系统/数…...

单轮车辆ABS防抱死控制Simulink仿真模型 1.可控制切换冰雪路面和开关ABS系统控制 2.仿真输出时域下的车速/轮速/制动距离/滑移率/控制信号曲线,可以配置车重/滑移率-摩擦系数曲线/主缸

单轮车辆ABS防抱死控制Simulink仿真模型 1.可控制切换冰雪路面和开关ABS系统控制 2.仿真输出时域下的车速/轮速/制动距离/滑移率/控制信号曲线&#xff0c;可以配置车重/滑移率-摩擦系数曲线/主缸压力/制动效能因数等参数。 3.有基础说明文档单轮车辆ABS防抱死控制Simulink仿真…...

PyFluent:CFD仿真的Python自动化革命

PyFluent&#xff1a;CFD仿真的Python自动化革命 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent PyFluent是Ansys Fluent的Python原生接口&#xff0c;它将传统CFD仿真从繁琐的GUI操作转变为代码…...

.au域名注册后如何进行SEO优化

.au域名注册后如何进行SEO优化 在全球互联网市场中&#xff0c;一个高效的搜索引擎优化&#xff08;SEO&#xff09;策略是网站成功的关键。对于在澳大利亚市场运营的网站而言&#xff0c;.au域名注册后的SEO优化尤为重要。本文将详细探讨在.au域名注册后如何进行SEO优化&…...

如何快速搭建Galgame社区平台:一站式开源解决方案指南

如何快速搭建Galgame社区平台&#xff1a;一站式开源解决方案指南 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 你是否曾为寻找Gal…...

LangChain4j实战避坑:用OpenAI EmbeddingModel做智能字段映射,我踩过的三个坑和解决方案

LangChain4j实战避坑指南&#xff1a;OpenAI EmbeddingModel在智能字段映射中的三大陷阱与突围策略 金融科技领域的数据接口对接&#xff0c;往往伴随着海量字段映射的繁琐配置。当合作方使用"证件号码"、"身份证号"、"ID Card"等不同表述指向同…...

从一线装维经验看,扩展式智能插座更适合多路监测与项目落地

作为一名做了12年现场电气安装与运维的一线装维人员&#xff0c;今天想聊聊智能插座。这些年接触过的智能插座不少&#xff0c;市面上的产品确实五花八门&#xff0c;外观、功能、结构都不一样。选择多了&#xff0c;对用户来说未必是好事&#xff0c;反而更容易挑花眼。尤其一…...

路径构建引擎:开源角色养成系统的架构解析与实践指南

路径构建引擎&#xff1a;开源角色养成系统的架构解析与实践指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 一、价值定位&#xff1a;构建虚拟角色的数字孪生平台 …...

OpenCore配置效率工具:从入门到精通的黑苹果EFI管理方案

OpenCore配置效率工具&#xff1a;从入门到精通的黑苹果EFI管理方案 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore&#xff08;OCAT&#xff09; 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 在黑苹果配置领…...