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

面试手撕排序

手撕排序

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

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

冒泡排序

原理:

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

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++];}}}
http://www.jsqmd.com/news/84215/

相关文章:

  • 【小沐杂货铺】基于Three.JS绘制三维海面/海洋/水面(WebGL / vue / react )
  • 本地私有知识库新选择:访答知识库的优势与数据分析
  • 800+高质量Unity材质球:游戏开发的视觉宝藏
  • 23.10.WebService技术
  • 基于深度学习的木薯病害检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 考研路茫茫――单词情结
  • 震惊!这家外卖小程序供应商,竟让餐厅日订单暴涨300%!
  • python —— types.MethodType —— 函数绑定
  • 目标检测效率革命:新一代Transformer架构如何重塑检测性能边界
  • 二手房翻新不踩坑!2025年这些靠谱公司帮你焕新家 - 品牌测评鉴赏家
  • 智能销售助手设计V2
  • 告警原理和处理流程深度剖析
  • 2025全国口碑装修公司红榜发布!这10家凭什么让业主疯狂安利? - 品牌测评鉴赏家
  • Kubernetes 可观测性体系构建指南:从传统监控到云原生生产级实践
  • 2025苏州毛坯房装修攻略:这5家专业公司让毛坯变美宅不踩坑 - 品牌测评鉴赏家
  • 吐血整理!口碑炸裂的装修公司大盘点! - 品牌测评鉴赏家
  • 风-储系统仿真模型;通过模糊逻辑控制策略驱动蓄电池变换器运行,以达到为电网提供惯量的目的
  • 给旧版 .NET 也开一扇“私有之门“ —— ILAccess.Fody 实现原理与设计
  • 003HTML
  • 全包装修不踩坑!2025年高性价比装企测评指南(附业主真实踩坑避坑攻略) - 品牌测评鉴赏家
  • 2025年12月苏州装修公司排名:盛世和家装饰实力解析! - 品牌测评鉴赏家
  • YashanDB数据库的分布式架构设计及优势剖析
  • 新房装修必看!十大口碑公司里,哪家用钱少、装得好、不踩坑? - 品牌测评鉴赏家
  • YashanDB数据库的分布式事务处理与性能调优指南
  • JavaEE进阶——SpringAOP从入门到源码全解析
  • 【玩转全栈】----Django制作部门管理页面 - 实践
  • Java-泛型
  • 北京婚介的狂妄红娘
  • Flutter 与 OpenHarmony 深度融合:实现分布式文件共享与跨设备协同编辑系统
  • SCCLIP