专栏首页cwl_Java数据结构与算法-直接选择排序

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

简介

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

代码示例
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 条评论
登录 后参与评论

相关文章

  • 数据结构与算法-反转排序

    cwl_java
  • Java工具集-数组(ArrayUtil)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • JVM性能调优-运⾏时常量池

    cwl_java
  • 看动画学算法之:排序-选择排序

    选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交互。

    程序那些事
  • Golang 中"泛型"的支持

    Golang不支持一般的类似java中的标记式泛型。很多人因此而十分不满,认为没有泛型增加了很多工作量。而目前由于泛型支持的复杂性,Golang的设计和实现者并...

    李海彬
  • 剑指Offer-旋转数组的最小数字

    package Array; /** * 旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 * 输入一个非递减...

    武培轩
  • PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结

    本文实例总结了PHP实现二维数组(或多维数组)转换成一维数组的常见方法。分享给大家供大家参考,具体如下:

    砸漏
  • 数据结构与算法-反转排序

    cwl_java
  • PHP | 删除数组中指定索引的元素,并且重排索引

    凌川江雪
  • [PHP] 最简单的权限控制设计

    假设url部分我们只有action和method , 某个控制器下的某个方法 , 比如:log/loginlog 查看日志下的登陆日志, action就是l...

    陶士涵

扫码关注云+社区

领取腾讯云代金券