选择排序(java实现)
2015-08-22 07:58
597 查看
在开始之前,大家应该先了解什么是选择排序,这里给些相关材料大家可以学习下
1. 百度百科定义
:选择排序2. 选择排序演示视频
:视频: 选择排序Select Sort排序舞蹈3. Flash
:http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=854. 选择排序个人觉得比较好的定义:
选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换5. 图例:
6. 完整代码
package com.sort; public class SelectSort { private int count = 20;//定义数组长度 private int[] intArr;//定义数组 public static void main(String[] args) { SelectSort selectSort = new SelectSort(); selectSort.initData(); selectSort.selectSort(); selectSort.showSortedArray(); } /** * 初始化数组 */ private void initData(){ intArr = new int[count]; System.out.println("intArr数组随机数为:"); for(int i=0;i<count;i++){ int temp = (int)(Math.random()*100); intArr[i] = temp; System.out.print(temp + ","); } System.out.println("\n"+"==============================================================="); } private void selectSort() { long startTime = System.nanoTime(); System.out.println("selectSort开始时间:" + startTime + "ns"); //第一层循环从起始元素开始选到倒数第二个元素,因为第二层循环时,初始值会在第一层循环的循环变量的基础上+1 for (int i = 0; i < intArr.length-1; i++) {//为什么这里不是intArr.length,因为当i=intArr.length-1时循环执行完后就数组intArr已经排好序了 int m = i;//用变量m保存i的值,下面要用,m保存值最小的元素下标,当前只有i所以i最小 for (int j = i; j < intArr.length; j++) { if(intArr[j]<intArr[m]){//只有当j下标的元素比m下标元素小是,才将m替换为两两比较的最小值下标 m=j; } } //经过第二层循环,现在m已经定位到最小值的下标,现在就开始将最小值放在i的位置吧(此时i还是最小值位置) if(m!=i){//说明最小值下标发生了改变 int temp = intArr[i]; intArr[i] = intArr[m]; intArr[m] = temp; } //此时i位置就正真是从i开始(包括i)数组的最小值了 } long stopTime = System.nanoTime(); System.out.println("selectSort结束时间:" + stopTime + "ns"); System.out.println("selectSort用时:" + (stopTime - startTime) + "ns"); } /** * 排序完成后输出排序结果 */ private void showSortedArray() { System.out.println("intArr排序完成后的排序结果是:"); for (int i = 0; i < intArr.length; i++) { System.out.print(intArr[i] + ","); } System.out.println("\n" + "==============================================================="); } }
运行结果如下:
intArr数组随机数为: 33,92,77,60,21,92,87,69,91,52,66,72,7,21,54,56,23,78,46,70, =============================================================== selectSort开始时间:4554817459271 selectSort结束时间:4554817507210 selectSort用时:47939 intArr排序完成后的排序结果是: 7,21,21,23,33,46,52,54,56,60,66,69,70,72,77,78,87,91,92,92, ===============================================================
相关文章推荐
- struts1和struts2的特点和区别
- java常用设计模式
- 使用wget 命令下载JDK的方法
- Server端接收了不一样的请求,在服务端要如何识别并操作呢
- 【8-21】java学习笔记03
- Eclipse上安装springsource-tool-suite(转)
- Struts2笔记――12.拦截器机制
- Java构造和解析Json数据的两种方法详解
- 每日五题(java基础)
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
- Java迭代器深入理解及使用
- 破除java神话之三:原子操作都是线程安全的
- 《深入理解Java虚拟机》第2版笔记(完整)
- Java的堆和栈
- spring的IOC有什么作用
- struts2中action跳转获取json数据
- java关键字及其作用
- 深入理解JVM内幕:从基本结构到Java 7新特性
- Android小经验:启动Eclipse,出现提示“......发现了以元素'd:skin'开头的无效内容。此处不应含有子元素...”
- java中volatile关键字的含义