美文网首页
排序:选择排序法(Java,Kotlin)

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

作者: 微风细雨007 | 来源:发表于2017-12-15 14:30 被阅读179次

    定义

    选择排序法定义

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

    定义图解

    选择排序,图片来源于网络

    简单示例

    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<String>) {
        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)

          本文链接:https://www.haomeiwen.com/subject/defdwxtx.html