news 2026/4/24 0:10:57

面试手撕排序

作者头像

张小明

前端开发工程师

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/23 16:03:26

智能家居组态王6.55脚本动画仿真

智能家居组态王6.55脚本动画仿真最近在折腾智能家居组态王6.55的脚本动画仿真&#xff0c;发现这玩意儿真是自动化控制的宝藏工具。特别是它的脚本系统&#xff0c;能让静态的界面动起来&#xff0c;今天咱们就聊聊怎么用脚本实现动态效果。先来看个基础操作&#xff0c;按钮控…

作者头像 李华
网站建设 2026/4/23 13:00:50

SolidWorks装配体坐标轴匹配介绍

在SolidWorks中理解和掌握装配体坐标轴匹配&#xff0c;是进行精准装配、高级配合以及协同设计的基础。这不仅仅是简单的“对齐”&#xff0c;更是一种设计意图的表达和管理。一、核心概念&#xff1a;设计原点与坐标系每个SolidWorks零件和装配体都有自己的原点和默认坐标系&a…

作者头像 李华
网站建设 2026/4/23 10:45:12

FlaskSession源码解析:从原生到扩展

会话管理&#xff1a;Flask Session从原生到扩展源码分析及使用 目录 会话管理&#xff1a;Flask Session从原生到扩展源码分析及使用 一、Flask 原生Session机制之会话的创建与恢复源码分析二、原生Session机制之会话的保存与延长会话有效期源码分析及依赖配置三、flask-sess…

作者头像 李华
网站建设 2026/4/23 10:45:58

2025年TOP8角膜塑形镜清洗与选择攻略:打破近视困扰,体验新选择

在选择OK镜时&#xff0c;家长和青少年需要关注多个方面&#xff0c;以确保所选产品能有效解决近视问题。首先&#xff0c;建议选择透氧性好的镜片&#xff0c;这样可以保持眼睛的健康&#xff0c;同时提升佩戴的舒适度。其次&#xff0c;了解不同品牌和型号的适配范围及成功率…

作者头像 李华
网站建设 2026/4/23 12:13:46

STM32F407驱动3.5寸ILI9486屏幕

1、硬件原理图2、软件模拟 8080 并行接口使用 GPIO 模拟 8080 时序&#xff0c;适合低速或简单应用。数据线&#xff1a;DB0~DB15 分散在 PD、PE、PB、PF 等多个 GPIO 口。控制线&#xff1a;RS&#xff08;D/C&#xff09;&#xff1a;PD11&#xff08;命令/数据选择&#xff…

作者头像 李华
网站建设 2026/4/23 12:18:59

暂停更新975年,这神器值得拥有!

引言 Windows系统更新不知道大家有没有去“服务”中关掉过&#xff0c;关掉后有没有用呢&#xff1f;我关掉过&#xff0c;但是没用&#xff0c;过段时间它又会更新。 所以最好用的关掉系统更新的方法是更改注册表&#xff0c;但是更改注册表有点麻烦&#xff0c;要找到正确的…

作者头像 李华