news 2026/6/26 16:28:12

面试手撕排序

作者头像

张小明

前端开发工程师

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/25 23:17:21

《构建游戏实时流失预警模型的核心逻辑》

玩家流失预警的关键痛点从来不是捕捉显性的行为衰减,而是解码藏在时序流转里的隐性流失信号—那些散落在跨模块交互、行为节奏变化中的序列异动,往往比单纯的在线时长缩短、任务参与度下降更早暴露玩家的离开倾向,也是实时预警模型能否实现“提前干预、精准留客”的核心突破…

作者头像 李华
网站建设 2026/6/26 18:32:40

两个步骤,打包war,tomcat使用war包

资源代码&#xff1a; https://download.csdn.net/download/hashiqimiya/92455258 如上 了解资源代码&#xff1a; 写了一个controller代码&#xff0c;控制接口对应该运行的函数。 package org.example.testproducttomcatwar;import org.springframework.web.bind.annotat…

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

idea修改maven的刷新引入依赖快捷键

在 IntelliJ IDEA 里&#xff0c;Load Maven Changes 对应的是当你修改 pom.xml 或者依赖后&#xff0c;手动刷新 Maven 项目的操作。你也可以给它自定义快捷键。具体步骤如下&#xff1a;1. 打开快捷键设置Windows/Linux: File → Settings → KeymapmacOS: IntelliJ IDEA → …

作者头像 李华
网站建设 2026/6/25 21:17:02

纯电动汽车Simulink仿真模型建模详细步骤。 通过文档的形式,跟着文档一步一步操作,既可以...

纯电动汽车Simulink仿真模型建模详细步骤。 通过文档的形式&#xff0c;跟着文档一步一步操作&#xff0c;既可以提高自己的建模能力&#xff0c;又可以对整个建模思路进行借鉴&#xff0c;形成设计能力。 附带模型。纯电动汽车仿真模型在Simulink里搭建就像搭乐高——找准核心…

作者头像 李华
网站建设 2026/6/24 23:33:55

同花顺平衡多空看图操作多空理论

{}多空:50,COLORFFFFFF,POINTDOT; J:(C-LLV(L,9))/(HHV(H,9)-LLV(L,9))*100,colormagenta; K:SMA(J,3,1),colorwhite; D:SMA(K,3,1),coloryellow; 动能:100 * (LLV(LOW,60)-EMA(CLOSE,3))/(LLV(LOW,60)-HHV(HIGH,60)),colorligray,LINETHICK2; 多:IF(动能>多空,动能,DRAWNUL…

作者头像 李华
网站建设 2026/6/26 13:28:05

通达信222222测试帖别下载

{} Z1:STRCAT(【,STRCAT(CODE,STKNAME));Z2:STRCAT( 行业&#xff1a;,HYBLOCK);Z3:STRCAT( 地域&#xff1a;,DYBLOCK);Z4:STRCAT(STRCAT( 概念&#xff1a;,GNBLOCK),】);Z5:STRCAT(Z1,Z2);Z6:STRCAT(Z3,Z4);Z7:STRCAT(Z5,Z6);DRAWTEXT_FIX(1,0.35,0.030,0,Z7),COLORGREEN…

作者头像 李华