前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构与算法-直接选择排序

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

作者头像
cwl_java
发布2019-10-26 21:14:06
3820
发布2019-10-26 21:14:06
举报
文章被收录于专栏: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次,得到一个按排序码从小到大排列的有序序列。

代码示例
代码语言: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;
        }
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档