news 2026/6/12 5:15:01

面试手撕排序

作者头像

张小明

前端开发工程师

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/6/8 5:17:55

ECS系统入门手记——其一

观前须知 ECS是一种用于处理大量运算&#xff0c;性能极高的架构&#xff0c;在某些特定的情况下可能发挥很大作用&#xff0c;由于所蕴含的知识很多&#xff0c;而我只粗学了10多个小时&#xff0c;某些地方可能会有纰漏&#xff0c;看不懂或者讲错了直接喷 注:需要导入的一些…

作者头像 李华
网站建设 2026/6/6 11:06:57

JAVA 中dao层的实体应该属于哪个层次VO,还是DTO,或者其他

在Java项目中&#xff0c;DAO层的实体通常指的是PO&#xff08;Persistent Object&#xff0c;持久化对象&#xff09;​ 或Entity&#xff08;实体类&#xff09;&#xff0c;而不是DTO或VO。以下是详细解释&#xff1a;1. PO&#xff08;持久化对象&#xff09; / Entity与数…

作者头像 李华
网站建设 2026/6/10 17:27:55

AutoGLM 旧安卓一键变 AI 手机:安装与使用指南

&#x1f4f1; AutoGLM: 让你的旧安卓手机秒变 AI 代理&#xff01;&#x1f680; 本文将为您提供一份“保姆级”指南&#xff0c;详细介绍如何安装、配置并使用 Open-AutoGLM&#xff0c;将您的安卓手机&#xff08;Android 7.0&#xff09;轻松变为一个强大的 AI 代理。 1️…

作者头像 李华
网站建设 2026/6/12 0:21:42

PMC政策文本量化评估

基于python构建的一个完整的PMC&#xff08;Policy Measurement and Comparison&#xff09;政策文本量化评估系统&#xff0c;使用Streamlit UI。一、系统架构概览1. 核心架构分层1. 前端交互层 (Streamlit UI)├── 多页面导航系统└── 交互式表单和可视化2. 业务逻辑层├…

作者头像 李华
网站建设 2026/6/11 8:06:22

同花顺短线精灵副图副图指标

{}VAR1:((CLOSE-MA(CLOSE,6))/MA(CLOSE,6)*100(CLOSE-MA(CLOSE,24))/MA(CLOSE,24)*100(CLOSE-MA(CLOSE,32))/MA(CLOSE,32)*100)/3; 持币区域:IF(VAR1<0,ABS(VAR1),0),COLORFEDCBA; 持股区域:IF(VAR1>0,VAR1,0),colorred; STICKLINE(VAR1>9 AND FILTER(VAR1<REF(VAR…

作者头像 李华