数据结构与算法:选择排序

原理

从当前位置到最后,找出最小(或者最大)值,放在当前位置,位置后移。然后重复此过程。

每次都要在剩余未排序的集合中,找到那个最小(或者最大)的值,放到当前位置。所以叫选择排序。

最小或者最大,影响的是降序还升序。

第一次:找到0 ~ n-1范围内的最小值,放在0位置。
第二次:找到1 ~ n-1范围内最小值,放在1位置。
第i次:找到 i ~ n-1范围内最小值,放在i 位置。

图解:

在这里插入图片描述

复杂度

时间复杂度 O(n²)
额外空间复杂度 O(1)

代码实现

java 版本
public static void chooseSort(int[] array) {
    
      
    if (array == null || array.length < 2) {
    
      
        return;  
    }  
  
    for (int i = 0; i< array.length; i ++) {
    
      
        int minIndex = i;  
        for (int j = i + 1; j < array.length; j ++) {
    
      
            if (array[minIndex] > array[j]) {
    
      
                minIndex = j;  
            }  
        }  
        if (minIndex != i) {
    
      
            int temp = array[i];  
            array[i] = array[minIndex];  
            array[minIndex] = temp;  
        }  
    }  
}
Kotlin 版本
fun chooseSort(array: IntArray) {
    
      
  
        // 只有一个数,或者没有数,不用排序  
        if (array.size < 2) {
    
      
            return  
        }  
  
        var minIndex: Int  
        for (i in array.indices) {
    
      // i 从 0  到 N-1            minIndex = i  
            for (j in (i + 1) until array.size) {
    
      
                minIndex = if (array[j] < array[minIndex]) {
    
      // 找到最小的那个, 这种方式排序出来的,是增序的。  
                    j  
                } else {
    
      
                    minIndex  
                }  
            }  
  
            // 把最小的值换到最前边来。  
            if(minIndex != i) {
    
      
                val temp = array[i]  
                array[i] = array[minIndex]  
                array[minIndex] = temp  
            }  
        }  
    }
将交换两个数的代码抽象乘一个函数
fun swap(array: IntArray, indexFrom: Int, indexTo: Int) {
    
      
    if (indexTo != indexFrom) {
    
      
        val temp = array[indexFrom]  
        array[indexFrom] = array[indexTo]  
        array[indexTo] = temp  
    }  
}

猜你喜欢

转载自blog.csdn.net/yztbydh/article/details/134985375