选择排序算法讲解

Posted zhijm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序算法讲解相关的知识,希望对你有一定的参考价值。

  一,选择排序的思想:

①先假设第一个数最小的,然后拿这个数去和后面的n个数依次进行比较,
②如果发现有比最小值还小的数 则通过中间变量记录下下标和值,
③然后继续拿这个最小值往后进行比较,如果又发现比最小值还小的值 就执行第②步,直到比完最后一个元素
④最后把存在中间变量的最小值和最小值的下标 和假设的那个最小值进行交换
二,示例演示

示例过程:
 2, 1, 4, 3
①2和 1, 4 ,3比较 ,发现有1比2小, 则用中间变量记录1和下标1, 然后再用存在中间变量的最小值和4比较, 不符合,再和3比较, 不符合,最后得到1为最小值,所以2和1就行位置的交换
1, 2, 4, 3
②2和 4 ,3 进行比较 规则和①一样
1, 2, 4, 3
③4和3进行比较 规则和①一样
1, 2, 3 ,4
通过示例演示发现 n个数 比较n-1次
三,代码
Ⅰ,按照思想进行代码的实现
public static void selectSort(int []arr){
        /**
         *示例:2 ,1, 4, 3
         * ①先假设第一个数最小的(2),然后拿这个数去和后面的n个数依次进行比较,
         * ②如果发现有比最小值还小的数 则通过中间变量记录下下标和值,
         * ③然后继续拿这个最小值往后进行比较,如果又发现比最小值还小的值 就执行第②步,直到比完最后一个元素
         * ④最后把存在中间变量的最小值和最小值的下标 和假设的那个最小值进行交换
         * 示例过程:
         * 2, 1, 4, 3
         * ①2和 1, 4 ,3比较 ,发现有1比2小, 则用中间变量记录1和下标1,  然后再用存在中间变量的最小值和4比较, 不符合,再和3比较, 不符合,最后得到1为最小值,所以2和1就行位置的交换
         * 1, 2, 4, 3
         * ②2和 4 ,3 进行比较 规则和①一样
         * 1, 2, 4, 3
         * ③4和3进行比较 规则和①一样
         * 1, 2, 3 ,4
         * 通过示例演示发现 n个数 比较n-1次
         */
        for(int i=0;i<arr.length-1;i++){
            // 声明中间值用进行比较和存最小值
            int minNumber=arr[i];
            int minIndex=i;
            for(int j=i+1;j<arr.length;j++){
                if(minNumber>arr[j]){
                    minNumber=arr[j];
                    minIndex=j;
                }
            }
            arr[minIndex]=arr[i];
            arr[i]=minNumber;
        }

    }

,通过观察示例交换的规律发现 当假设成立的时候 就不用进行数据的交换了,因此当中间变量的下标值和假设的值相等时,就不用就行数据的交互

public static void selectSort2(int []arr){
        for(int i=0;i<arr.length-1;i++){
            int minNumber=arr[i];
            int minIndex=i;
            for(int j=i+1;j<arr.length;j++){
                if(minNumber>arr[j]){
                    minNumber=arr[j];
                    minIndex=j;
                }
            }

            if(minIndex!=i){
                arr[minIndex]=arr[i];
                arr[i]=minNumber;
            }
        }
    }

 

 

以上是关于选择排序算法讲解的主要内容,如果未能解决你的问题,请参考以下文章

i掌舵培训大会 | 选择排序算法以及指针

选择排序算法讲解

选择排序算法讲解

十大经典排序算法的算法描述和代码实现

快速选择算法(Quick Selection)

简易学算法之堆排序