您的位置:首页 > 编程语言 > Java开发

选择排序(java实现)

2015-08-22 07:58 597 查看
在开始之前,大家应该先了解什么是选择排序,这里给些相关材料大家可以学习下

1. 百度百科定义

选择排序

2. 选择排序演示视频

视频: 选择排序Select Sort排序舞蹈

3. Flash

http://ds.fzu.edu.cn/fine/resources/FlashContent.asp?id=85

4. 选择排序个人觉得比较好的定义:

选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换

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,
===============================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: