面试中常常问的三种简单排序方法
2023-09-14 09:08:12 时间
/** * 三种简单的排序 * 本类中全部举例都是依照从小到大进行排序 * @author caohaicheng * @time 2014-07-24 */ public class SortDemo { //int[] score={7,10,35,21,78,2,1,9}; public static void main(String[] args) { SortDemo sd=new SortDemo(); System.out.println("*********************************冒泡排序**********************************"); //冒泡排序 sd.BubbleSort(); System.out.println("*********************************选择排序**********************************"); //选择排序 sd.selectSort(); System.out.println("*********************************插入排序**********************************"); //插入排序 sd.insertSort(); } /** * 冒泡排序:循环进行相邻的两个数比較,然后依据规则决定是否调换位置 */ private void BubbleSort() { int[] score={7,10,35,21,78,2,1,9}; for(int i=1;i<score.length;i++){ //最多比較N-1次,每比較一轮就将所參与比較的数的最大值蠕动到这些数的最后面 /* * 第二次循环的j非常关键,由于当第一轮比較结束,数组中的最大的那个值已经被放到最后一位了 * 第二轮的时候就不须要最后一个数字參与比較了,比較结束倒数第二大的数放在倒数第二的位置了 * 依次类推 ,最多比較N-1次就能够全部排序好。 */ for(int j=0;j<score.length-i;j++){ if(score[j]>score[j+1]){ //两个元素互换位置 int temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; } } System.out.print("冒泡排序第"+i+"次排序结果:"); for(int k=0;k<score.length;k++){ System.out.print(score[k]+"\t"); } System.out.println(); } System.out.print("冒泡排序终于排序的结果:"); for(int i=0;i<score.length;i++){ System.out.print(score[i]+"\t"); } System.out.println(); } /** * 选择排序:顺序依次取出一个数与它后面的全部数进行比較,找出最小的然后交换位置 * 冒泡排序是跟相邻的两两比較,发现比他小就交换位置; 而选择排序是跟全部的都比較之后,确定了哪个最小,再交换位置 * */ private void selectSort(){ int[] score={7,10,35,21,78,2,1,9}; for(int i=0;i<score.length-1;i++){//没循环依次就找到了一个最小值,最多循环N-1次 int minIndex=i; for(int j=i+1;j<score.length;j++){//跟后面的全部数进行比較,找出那个最小的 if(score[minIndex]>score[j]){ minIndex=j;//找到最小值的下标了 } } //交换位置 int temp=score[minIndex]; score[minIndex]=score[i]; score[i]=temp; System.out.print("选择排序第"+i+"次排序结果:"); for(int k=0;k<score.length;k++){ System.out.print(score[k]+"\t"); } System.out.println(); } System.out.print("选择排序终于排序的结果:"); for(int i=0;i<score.length;i++){ System.out.print(score[i]+"\t"); } System.out.println(); } /** * 插入排序:跟玩扑克牌的时候抓牌"码牌"相似,我们抓第一张牌不用排序,第二张牌要与第一张牌进行比較,假设小于第一张牌,那么就 * 将第一张牌移动到第2的位置上 * 以后依次抓牌,与手牌从前往后依次比較,当发现小于某张手牌的时候就将抓到的牌放在该位置,该位置后的牌依次后移。 * */ private void insertSort(){ int[] score={7,10,35,21,78,2,1,9}; for(int i=1;i<score.length;i++){ int temp=score[i]; int j=i-1; while(j>=0 && score[j]>temp ){ score[j+1]=score[j]; j--; } score[j+1]=temp; } System.out.print("插入排序终于排序的结果:"); for(int i=0;i<score.length;i++){ System.out.print(score[i]+"\t"); } System.out.println(); } }
相关文章
- Go语言内建方法之make(十二)
- js的sort排序方法_sort对象排序
- 【说站】JavaScript数组重排序的方法
- java验证手机号正则表达式_Java使用正则表达式验证手机号和电话号码的方法「建议收藏」
- 锐捷交换机(S2924/2928G)光口改电口,或电口改光口的准确方法「建议收藏」
- ORA-12520错误解决方法详解数据库
- python数据类型及其特有方法详解编程语言
- [五] JavaIO之InputStream OutputStream简介 方法列表说明详解编程语言
- Java多线程12:ReentrantLock中的方法详解编程语言
- Java Servlet Filter(过滤器)是什么?它的方法有哪些?
- Deepin Linux 中手动升级Firefox的方法
- Linux文件排序方法:按文件大小排序(linux文件按大小排序)
- 启MySQL 服务的开启方法探索(mysql服务怎么开)
- MySQL中汉字拼音排序的实现方法(mysql汉字拼音排序)
- 异常解决Linux中文乱码异常的方法(linux环境中文乱码)
- 通过Oracle实现先分组再排序的方法(oracle先分组后排序)
- MySQL数据库中实现分页加排序的方法(6mysql分页加排序)
- Oracle中填补空白的方法(oracle中补空格)
- MySQL 注册码获取方法大全(mysql z注册码)
- 解决MySQL切换用户问题的方法(mysql不能切换用户)
- jsp复选框使用方法
- 让MySQL支持中文排序的实现方法
- PHP中数组的三种排序方法分享
- sql2005日志清理SQL2005压缩清除日志的方法
- 随机数字去掉重复和排序的方法
- SQL字符型字段按数字型字段排序实现方法
- C++关于STL中sort()对struct排序的方法
- php二维数组排序与默认自然排序的方法介绍
- PHP之生成GIF动画的实现方法
- Zabbix邮件报警设置方法
- js判断鼠标左、中、右键哪个被点击的方法