码迷,mamicode.com
首页 > 编程语言 > 详细

直接选择排序

时间:2014-11-19 23:35:53      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   os   sp   java   for   

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/

直接选择排序基本思想:

     直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

                                                                             ——《百度百科》

图解直接选择排序:

bubuko.com,布布扣

Java代码解析:

public static <T extends Comparable<T>> void SelectedSort(T[] datas){
    T tmp=null;
    for(int i=0; i<datas.length-1; i++){
        for(int j=i+1; j<datas.length; j++){
            if(datas[i].compareTo(datas[j])>0){
                tmp=datas[i];
                datas[i]=datas[j];
                datas[j]=tmp;
            }
        }
        System.out.println("第"+(i+1)+"趟排序:"+Arrays.toString(datas));
    }
}

     但是,上述的算法中存在很大的问题:每趟比较中,一旦发现有比第一个数据小的项,立即交换它们,不管这个数据是不是待排序的数据中最小的那个。这在无形中增加了交换的次数,降低了效率。基于这点我们对直接选择排序做一下改进:

public static <T extends Comparable<T>> void advancedSelectedSort(T[] datas){
    T tmp=null;
    int minIndex=-1;
    T min=null;
    for(int i=0; i<datas.length-1; i++){            
        min=datas[i];
        minIndex=i;
        for(int j=i+1; j<datas.length; j++){            
            if(min.compareTo(datas[j])>0){
                min=datas[j];
                minIndex=j;
            }
        }
        if(minIndex!=i){
            tmp=datas[i];
            datas[i]=min;
            datas[minIndex]=tmp;        
        }
        System.out.println(Arrays.toString(datas));
    }
}

测试一下:

public static void main(String[] args) {
    Integer[] datas={5,2,7,-2,9,0,-9};
    System.out.println("原始数据:");
    System.out.println(Arrays.toString(datas));
    System.out.println("排序过程:");
    SortInside.advancedSelectedSort(datas);
}

bubuko.com,布布扣

     从打印的结果来看,直接排序永远都会进行n-1趟排序。这有些浪费资源,也不合理。那怎么才能让成为有序序列的数据立即停止排序呢?请看冒泡排序

直接选择排序

标签:style   blog   http   ar   color   os   sp   java   for   

原文地址:http://www.cnblogs.com/yaoyinglong/p/Java直接选择排序.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!