算法 直接选择排序小述

版权声明:转载请声明: https://blog.csdn.net/MingJieZuo/article/details/83715133

一、概述

本节主要简单介绍一下直接选择排序算法,直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]-R[n-1]中选取最小值,与R[0]交换,第二次从R[1]-R[n-1]中选取最小值,与R[1]交换,…,第n-1次从R[n-2]-R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。摘自百度百科

二、分析

直接选择排序的思路很简单,在这里我们就以数组array为例,其值为array[13, 17, 14, 15, 12, 14],首先我们在array数组中找到最小值,并与array[0]进行交换

在这里插入图片描述

同理,我们array[1]到array[5]中寻找最小值,随后最小值与array[1]互换

在这里插入图片描述

同上,我们在数组中array[2]-array[5]中寻找最小的数字,因为array[2]本身为最小数字,所以我们不需要交换处理了

在这里插入图片描述

同上,我们在数组中array[3]-array[5]中寻找最小的数字,随后与array[3]交换位置

在这里插入图片描述

同上,我们在数组中array[4]-array[5]中寻找最小的数字,随后与array[4]互换位置。到这里我们的排序就结束了,我们发现数组array已经有序了

在这里插入图片描述

三、代码展示

这是我们的直接选择排序算法代码

    private static int[] selectSort(int[] array) {
        int length = array.length;
        // 共需要n-1轮比较
        for(int i=0; i<length-1; i++){
            int minIndex = i;
            for(int j=i; j<length-1; j++){
                // 从小到大排列(通常放在循环体里判断)
                if(array[minIndex] > array[j+1]){
                    minIndex = j+1;
                }
            }
            if(i != minIndex){
                // 将最小值与 array[i]值互换
                int temp = array[i];
                array[i] = array[minIndex];
                array[minIndex] = temp;
            }
        }
        return array;
    }

四、总结

当然代码的编写并不是固定的,肯定会有很多变形格式,其实我们研究的也是其直接选择的思想和每种写法的效率问题。如果想要查看更多算法基础,去我的博客目录里查看吧,因为关于每块知识点的介绍,博客单节写的比较零散,不容易查找。

猜你喜欢

转载自blog.csdn.net/MingJieZuo/article/details/83715133