排序:选择排序法(Java,Kotlin)

定义

选择排序法定义

简单选择排序的基本思想:
第1趟,在待排序记录r[1] ~ r[n]中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2] ~ r[n]中选出最小的记录,将它与r[2]交换;
以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

定义图解

排序:选择排序法(Java,Kotlin)_第1张图片
选择排序,图片来源于网络

简单示例

Java

public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
        selectSort(arr);
    }

    private static void selectSort(int[] arr) {
        int size = arr.length;
        for (int i = 0; i < size; i++) {
            int minIndex = i;
            for (int j = i + 1; j < size; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                    //示例图片上交换的位置
                    //swap(arr,j,i);
                }
            }
            //优化过性能更好
            swap(arr, i, minIndex);
            System.out.print(arr[i] + ",");
        }
    }

    private static void swap(int[] arr, int x, int y) {
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }
}

Kotlin

fun main(args: Array) {
    val arr: IntArray = intArrayOf(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
    sortSelect(arr)
}

fun sortSelect(intArray: IntArray) {
    val size = intArray.size
    for (i in 0 until size) {
        var minIndex: Int = i
        var j: Int = i + 1
        while (j < size) {
            if (intArray[j] < intArray[minIndex]) {
                minIndex = j
            }
            j++
        }
        swap(intArray, i, minIndex)
        print("${intArray[i]},")
    }
}

fun swap(intArray: IntArray, i: Int, j: Int) {
    var temp = intArray[i]
    intArray[i] = intArray[j]
    intArray[j] = temp
}

遇到的坑

  • 写交换方法的时候,要用数组,这个跟基本类型有关系
  • 如果把整形数组换成Object,这样要使用Integer,int不行
  • kotlin的for循环和java的不一样,用while

你可能感兴趣的:(排序:选择排序法(Java,Kotlin))