算法学习之选择排序算法(java)
来源:互联网 发布:db2 查看数据库 名称 编辑:程序博客网 时间:2024/05/16 13:05
记录今天学习的选择排序算法
个人理解的选择排序 :从未排序的的序列中选择最小或者最大元素,放到已排序的序列的最后一位,完成排序。
根据对选择排序的理解,首先在未排序的序列中找到最小或者最大元素的位置,实例为寻找最小元素:
public static int getSmallerPos(int src[],int pos){if(src==null||src.length==0){return -1;}int smaller=src[pos];int smallerPos=pos;for(int i=pos+1;i<src.length;i++){if(smaller>src[i]){smaller=src[i];smallerPos=i;}}return smallerPos;}然后根据进行换位排序:
public static void selectSort1(int src[]){if(src==null||src.length<2){return;}int pos=0;int srcLen=src.length;for(int i=0;i<srcLen-1;i++){pos=getSmallerPos(src,i);if(pos!=i){int temp=src[i];src[i]=src[pos];src[pos]=temp;}}}测试排序时间:
public class SortTest{final static int[] bigArray=new int[100000];static{for(int i=0;i<bigArray.length;i++){bigArray[i]=(int)(Math.random()*1000000);}}public static void main(String[] args) {int[] array=bigArray;System.out.println("开始排序...");long startTime=System.currentTimeMillis();selectSort1(array);//选择排序算法实现//insertSort4(array);//直接插入排序算法实现long endTime=System.currentTimeMillis();System.out.println("排序时间是"+(endTime-startTime)+"毫秒");int len=array.length<20?array.length:20;for(int i=0;i<len;i++){System.out.print(array[i]+(i==len-1?"":","));}System.out.print(",……,");System.out.print(array[array.length-3]+",");System.out.print(array[array.length-2]+",");System.out.print(array[array.length-1]);}}执行结果:
开始排序...排序时间是4411毫秒9,13,22,49,60,82,86,93,96,103,108,114,126,129,131,140,151,168,170,174,……,999993,999998,999998
另一台电脑(我的小破电脑)执行结果:
开始排序...排序时间是6950毫秒2,2,15,32,39,52,56,59,64,70,80,82,87,105,131,137,145,145,156,164,……,999967,999978,999990
以上代码合并成一个嵌套的for循环:public static void selectSort2(int src[]){if(src==null||src.length<2){return;}int pos=0;int srcLen=src.length;for(int i=0;i<srcLen-1;i++){pos=i;int smaller=src[i];for(int j=i+1;j<srcLen;j++){if(smaller>src[j]){smaller=src[j];pos=j;}}if(pos!=i){int temp=src[i];src[i]=src[pos];src[pos]=temp;}}}
同样使用上面的SortTest类测试执行时间
执行结果:
开始排序...
排序时间是7345毫秒
6,7,10,13,13,13,19,19,30,38,74,76,101,134,136,144,148,150,150,163,……,999984,999986,999989
另一台电脑(我的小破电脑)执行结果:
开始排序...
排序时间是12819毫秒
3,17,21,47,61,62,71,81,84,84,89,93,94,107,118,129,145,147,168,169,……,999954,999974,999980
代码合并之后,排序执行时间变慢了,这是为什么呢?没有想明白……难道跟cpu的运行有关系?
哎,我的小破本儿果然运算能力慢啊!
0 0
- 算法学习之选择排序算法(java)
- 算法学习之排序——选择排序(Java)
- Java再学习-算法之选择排序
- 算法学习之排序算法:选择排序
- Java-排序算法之选择排序算法
- 算法学习之选择排序
- 算法学习之选择排序
- Java-算法之选择排序
- java算法之选择排序
- java算法之选择排序
- Java算法之选择排序
- java算法之五简单选择排序(选择排序)
- 算法学习笔记之选择排序算法
- 经典算法学习:排序之选择排序
- 算法学习之排序(3)--选择排序
- [学习笔记]排序算法之选择排序
- 算法学习笔记--排序之选择排序
- java排序算法学习(一)--选择排序
- cocos2dx3.2 android 编译失败问题
- html包含css 和js
- 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
- Cocos2D-X弹出对话框的实现与封装
- 使用PowerShell更新SharePoint 2010 UserProfile Service的Property value
- 算法学习之选择排序算法(java)
- R语言 错误 Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod
- CSS禁止文字选择
- 书籍管理 JAVA
- Struts2正则表达式校验总结
- jQuery源码分析-12 DOM操作-Manipulation-核心函数.domManip()
- 数据预处理之归一化
- 有了iPhone 6 Plus,还要iPad吗?
- windbg调试环境搭建