news 2026/4/18 3:53:02

面试手撕排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试手撕排序

手撕排序

(写的时候别忘了关提示,很多时候负面,给我错的代码还分心自己)

(小心别敲错一些变量,算法对了但是结果有问题,顺着逻辑梳理,看变量敲没敲错)

冒泡排序

原理:

扫描比较相邻不按顺序就交换(也可以理解为把第几大的依次放到后面)

packagesort;importjava.util.Scanner;publicclassmaopao{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt(),a[]=newint[n];for(inti=0;i<n;i++){a[i]=sc.nextInt();}for(inti=0;i<n;i++){for(intj=0;j<n-i;j++){if(j!=n-i-1&&a[j]>a[j+1]){inttemp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}for(inti=0;i<n;i++){System.out.print(a[i]+" ");}}}

选择排序

原理:

依次选最几小/大放到前面

packagesort;importjava.util.Scanner;publicclassxuanze{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt(),a[]=newint[n];for(inti=0;i<n;i++){a[i]=sc.nextInt();}for(inti=0;i<n;i++){intmin=Integer.MAX_VALUE,wz=-1;for(intj=i;j<=n-1;j++){if(a[j]<min){min=a[j];wz=j;}}intsum=a[i];a[i]=min;a[wz]=sum;}for(inti=0;i<n;i++){System.out.print(a[i]+" ");}}}

快速排序

原理:

分治+分区,核心是分区,每次选基准值,要保证基准最左边的都比他小,右边的都比他大,可以理解为每次排好基准值对应的那个元素,分治就全排完。

packagesort;importjava.util.Scanner;publicclassquick{staticintn,a[]=newint[100005];publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);n=sc.nextInt();for(inti=0;i<n;i++){a[i]=sc.nextInt();}sort(0,n-1);for(inti=0;i<n;i++){System.out.print(a[i]+" ");}}staticvoidsort(intl,intr){if(l>=r)return;intzj=kp(l,r);sort(l,zj-1);sort(zj+1,r);}staticintkp(intl,intr){intsum=a[l];while(l<r){while(l<r&&a[r]>sum){r--;}if(l<r){a[l]=a[r];l++;}while(l<r&&a[l]<sum){l++;}if(l<r){a[r]=a[l];r--;}}a[l]=sum;returnl;}}

归并排序

原理:

分治+合并两个有序数组,合并细节可能有点麻烦,hot100应该都做过来链表版本的合并吧,这里就是换成了数组,主要也是注意一些边界细节啥的

packageguibing;importjava.util.Scanner;publicclassguibing{staticintn,a[]=newint[100005];publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);n=sc.nextInt();for(inti=0;i<n;i++){a[i]=sc.nextInt();}guib(0,n-1);for(inti=0;i<n;i++){System.out.print(a[i]+" ");}}staticvoidguib(intl,intr){if(l>=r)return;intmid=l+(r-l)/2;guib(l,mid);guib(mid+1,r);intcd1=mid-l+1,cd2=r-mid,az[]=newint[cd1],ar[]=newint[cd2],f1=0,f2=0,qd=l,f3=0,f4=0;for(inti=l;i<=mid;i++){az[f1++]=a[i];}for(inti=mid+1;i<=r;i++){ar[f2++]=a[i];}while(f3<cd1&&f4<cd2){if(az[f3]<=ar[f4]){a[qd++]=az[f3++];}else{a[qd++]=ar[f4++];}}while(f3<cd1){a[qd++]=az[f3++];}while(f4<cd2){a[qd++]=ar[f4++];}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:44:40

SolidWorks工程图用途及深入介绍

在机械结构设计中&#xff0c;工程图是将三维设计意图转化为二维技术语言的核心载体&#xff0c;是连接设计、制造、检验、维护等环节的“技术契约”。SolidWorks作为主流的三维CAD软件&#xff0c;其工程图模块深度集成了参数化建模与二维出图能力&#xff0c;既保留了传统工程…

作者头像 李华
网站建设 2026/4/17 9:35:03

YOLOv11涨点改进 | 独家创新首发、Conv卷积改进篇 | SCI一区 2025 | 引入MSConvStar多尺度卷积星形模块,有效增强捕捉多范围特征,助力目标检测、图像分割、图像分类高效涨点

一、本文介绍 🔥本文给大家介绍使用MSConvStar多尺度卷积星形模块改进YOLOv11模型性能。通过结合多尺度卷积和星形操作,MSConvStar增强了特征提取能力,尤其在处理不同尺寸和复杂背景的物体时,能够更有效地捕捉多范围特征,改善模型的空间感知和非线性特征变换能力。该模块…

作者头像 李华
网站建设 2026/4/18 3:50:33

【LORA】

好的&#xff0c;这是对您提供的博客文章《A Gentle Introduction to LoRA》的全文翻译。 原文链接: https://thinkingmachines.ai/blog/lora/ 原文标题: A Gentle Introduction to LoRA 译文标题: LoRA 简明入门 正文翻译 当我第一次进入大型语言模型&#xff08;LLM&#xf…

作者头像 李华
网站建设 2026/4/17 21:11:40

五相svpwm(4矢量+双空间调制),可用于反电势正弦和非正弦的的五相电机矢量控制。 附文档说明

五相svpwm&#xff08;4矢量双空间调制&#xff09;&#xff0c;可用于反电势正弦和非正弦的的五相电机矢量控制。 附文档说明。五相电机的磁场调制就像在玩俄罗斯方块——空间矢量多到让人眼花缭乱。传统的三相SVPWM已经够折腾人了&#xff0c;现在面对五个相位轴&#xff0c;…

作者头像 李华
网站建设 2026/4/18 3:51:48

【RabbitMQ】RPC模式(请求/回复)

本章目标理解RabbitMQ RPC模式的工作原理和适用场景。掌握回调队列&#xff08;Callback Queue&#xff09;和关联ID&#xff08;Correlation Id&#xff09;的使用。实现基于RabbitMQ的异步RPC调用。学习RPC模式下的错误处理和超时机制。构建完整的微服务间同步通信解决方案。…

作者头像 李华
网站建设 2026/4/15 8:52:20

25、技术探索:从数据查询到包管理的全面指南

技术探索:从数据查询到包管理的全面指南 在软件开发和系统管理的领域中,数据查询和包管理是两个至关重要的方面。下面我们将深入探讨这两个领域的相关内容。 数据查询与路由 在数据处理中,从数据存储中获取特定记录是常见操作。以下是一段用于从数据存储中获取最后 10 条…

作者头像 李华