news 2026/9/24 16:36: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/9/24 20:20:35

java学习日志--API文档的小白使用介绍

一、API文档概述 API在上上篇&#xff0c;常见类库&#xff08;上&#xff09;中有过描述&#xff0c;就是帮助我们开发项目的类库&#xff0c;但是这些类库很多很多&#xff0c;他们具体是什么作用&#xff0c;里边的方法有哪些&#xff0c;怎么去使用&#xff0c;我们除了自…

作者头像 李华
网站建设 2026/9/24 20:20:18

常见面试题——滑动窗口算法

按奇偶排序数组 题目理解 题目链接&#xff1a;按奇偶排序数组 简而言之就是把数组中所有偶数移到前面&#xff0c;奇数移到后面&#xff0c;返回任意满足条件的数组即可。 解题思路 双指针交换 用两个指针 l&#xff08;从0开始&#xff09;和 r&#xff08;从l 1 开始&am…

作者头像 李华
网站建设 2026/9/24 20:20:10

004-MD5_易车网

本文案例网站&#xff1a;易车网 加密参数 找加密位置 可以试试搜索关键字&#xff0c;我这里使用xhr跟栈找加密位置&#xff0c;将网址特殊部分截下用于断点&#xff0c;刷新网页断下来&#xff1a; 参数里传入了密文&#xff0c;跟异步后第一个栈看&#xff1a; 还有&#x…

作者头像 李华
网站建设 2026/9/24 20:20:02

AI助力SQL Server 2016安装:自动生成安装脚本与配置指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个SQL Server 2016智能安装助手&#xff0c;要求&#xff1a;1. 根据用户硬件配置自动生成最优安装参数&#xff1b;2. 提供图形化安装步骤指引&#xff1b;3. 包含常见错误解…

作者头像 李华
网站建设 2026/9/24 20:19:54

Prius2004永磁同步电机设计探秘

Prius2004永磁同步电机设计报告&#xff1a;磁路法、maxwell有限元法、MotorCAD温仿真、应力分析。 (内容比较完善&#xff0c;用于很需要的朋友&#xff0c;不支持讲解&#xff0c;等额外服务哈。 ) 内容&#xff1a;&#xff1a; 1.Excell设计程序&#xff0c;可以了解这个电…

作者头像 李华