算法基础--简单选择排序

Posted 谓戒

tags:

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

基本思想:

在所有元素中,选择最小的一个数和第一个元素交换位置;然后选择第二小的数和第二个元素交换位置,以此类推,直到结束。

时间复杂度计算:

(1)最好的情况是不用交换位置,但是比较的次数无法减少,交换次数O(0)

(2)最坏的情况也是一样,交换位置次数最多,但是比较次数还是一样,交换次数O((n+1)*(n-2)/2) = O(n^2)

(3)比较次数: O(n^2)

(4)所以无论好坏还是平均,时间复杂度都是O(n^2);

代码:

public static void selectSort( int[] arr){

    int a = arr.length;

    for(int i = 0 ; i < a ; i ++){

        int min = i;

        for(int j = i ; j < a ;j++ ){

            if(arr[j] < arr[min]){

                min = j;

            }

        }

        if(min != i){

            int temp = arr[i];

            arr[i] = arr[min];

            arr[min] = temp; 

        }

    }

}


优化:简单选择排序每次循环都只能取出最小的一个元素,那么优化可以让他取出两个元素,最小和最大的两个;

复杂度计算:虽然还是O(n^2),但是大约是改良前的四分之一;虽然空间复杂度还是O(n),但是空间复杂度从之前的O(1)提升到O(2);

public static void selectSort2(int[] arr){

    int a = arr.length;

    for(int i = 0 ; i <= a/2 ; i++){

        int min = i;

        int max = a-1-i;

        for(int j = i ; j <  a-i ;j++) {

            if(arr[j] < arr[min]){

                min = j;

            }

            if(arr[j] > arr[max]){

                max = j;

            }

        }

        if(min != i){

            int temp = arr[i];

            arr[i] = arr[min];

            arr[min] = temp;

        }

        if(max != a -1-i){

            int temp = arr[a-1-i];

            arr[a-1-i] = arr[max];

            arr[max] = temp;

        }

    }

}

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

算法基础之选择排序

选择排序算法

java基础算法-选择排序

算法基础--简单选择排序

2-算法基础

Java最简单选择排序算法