选择排序

选择排序的步骤如下。
(1) 从左至右检查数组的每个格子,找出值最小的那个。
在此过程中,用一个变量来记住检查过的数字的最小值(事实上记住的是索引)。
如果一个格子中的数字比记录的最小值还要小,就把变量改成该格子的索引
(2) 每一轮检查完,知道哪个格子的值最小之后,将该格与本轮检查的起点交换。
第 1 轮检查的起点是索引 0,第 2 轮是索引 1,以此类推。

冒泡排序直接比较交换未排序的相邻的两个值;而选择排序先检查未排序的起始索引值与其它值(记录最小值索引),检查完毕之后再将起始值与最小值进行交换(每一轮检查交换结束,最小值总是在起始位值)。
在完全逆序的情况下,冒泡排序每一轮的每一次检查之后都要做交换元素的动作,而选择排序则在每一轮检查完毕之后再进行元素的交换。

冒泡排序和选择排序比较
package com.sort;

/**
 * @author: jk
 * @since: 2020-03-20 01:10
 * <p>
 * 选择排序
 * </p>
 **/
public class selection_sort {

    public static void main(String[] args) {
        int[] list = {65, 55, 45, 35, 25, 15, 10};
        // int[] sortList = selectionSort(list);
        int[] sortList = selectionSort2(list);
        for (int i = 0; i < sortList.length; i++) {
            System.out.println(sortList[i]);
        }
    }

    private static int[] selectionSort(int[] array){

        for (int i = 0; i < array.length; i++) {
            // 1 记住最小值的索引
            int lowestIndex = i;

            // 2 将array[i] 与它后面的所有元素比较
            for (int j = i + 1; j < array.length; j++) {
                // 将 lowestIndex 更新为最小值的索引
                if (array[j] < array[lowestIndex]){
                    lowestIndex = j;
                }
            }

            // 3 比较完之后,如果 lowestIndex 有更新,则交换元素
            if (lowestIndex != i){
                int temp = array[i];
                array[i] = array[lowestIndex];
                array[lowestIndex] = temp;
            }
        }

        // 4 循环完毕,即排序完成。
        return array;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容