数据结构与算法-直接选择排序

2019-10-26 21:14:06 浏览数 (1)

简介

直接选择排序(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次,得到一个按排序码从小到大排列的有序序列。

代码示例
代码语言:javascript复制
package *;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @program: data-structure
 * @description: 直接选择排序
 * @author: ChenWenLong
 * @create: 2019-09-10 14:14
 **/
public class SelectSort {

    /**
     * 功能描述:
     * 〈由于交换位置放在了第一层循环里面,所以速度会比冒泡(放在了第二层循环中)快〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:15
     */
    public void selectSort(int[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j]>array[index]){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            int temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述: double
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:17
     */
    public void selectSort(double[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j]>array[index]){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            double temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述:
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:17
     */
    public void selectSort(long[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j]>array[index]){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            long temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述: char
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:17
     */
    public void selectSort(char[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j]>array[index]){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            char temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述: String 根据长度排序
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:17
     */
    public void selectSort(String[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j].length()>array[index].length()){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            String temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述:BigDecimal
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:20
     */
    public void selectSort(BigDecimal[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j].compareTo(array[index]) == 1){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            BigDecimal temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

    /**
     * 功能描述: Date
     * 〈〉
     *
     * @params : [array]
     * @return : void
     * @author : cwl
     * @date : 2019/9/10 14:20
     */
    public void selectSort(Date[] array){
        //作为最大值(或最小)的下标
        int index;
        for(int i=1;i<array.length;i  ){
            //默认第一个最大(或最小)
            index=0;
            for(int j=1;j<array.length-i;j  ){
                //取最大值的下标
                if(array[j].compareTo(array[index]) == 1){
                    index=j;
                }
            }
            //在上面的for循环中找到了最大(最小)值的下标
            //交换位置
            //一次循环都会将一个最值放到最后,所以长度逐次递减
            Date temp=array[array.length-i];
            array[array.length-i]=array[index];
            array[index]=temp;
        }
    }

}

0 人点赞