美文网首页
【算法】选择排序

【算法】选择排序

作者: 自学Java闯天下 | 来源:发表于2020-01-21 11:21 被阅读0次

选择排序是一种较为简单直观的算法,简单暴力易看懂(代价就是效率较低)。

其原理就是不断遍历数组,每遍历一轮都选择出一个最值放置到前方使其有序排列,然后再遍历剩余的无序元素,依此类推,直至所有元素都有序排列。

现有一数组int[] array = {3, 5, 6, 1, 8, 7, 4, 9, 2, 10},以升序排列为例,其排序过程如下:


image.png

代码如下:

public static void main(String[] args) {
    int[] array = {3, 5, 6, 1, 8, 7, 4, 9, 2, 10};
    for (int i = 0; i < array.length; i++) {
        for (int j = i + 1; j < array.length; j++) {
            if (array[i] > array[j]) {
               int tmp = array[j];
               array[j] = array[i];
               array[i] = tmp;
            }
        }
    }
}

让我们思考一下,上面这种方法的效率会不会偏低了呢?

每一轮其实只需要筛选出一个最小值放到前面即可,根本没必要在中间过程中经过多次多余的交换。
我们只需要声明一个变量来记住最小值的索引,然后在每一轮遍历的最后根据最小值的索引值将这个最小值放置到前面正确的位置即可。

来看看改进过的代码:

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;
        }
    }
    int tmp = array[i];
    array[i] = array[minIndex];
    array[minIndex] = tmp;
}

感兴趣的小伙伴可以自行测试一下改进后的算法是否比原先的代码快了好几倍。

当然,对于选择排序的优化还有很多种方式(毕竟最原始的选择排序效率太低了,可优化的空间相当大),这里就不一一介绍了,留给大家自行思考~

相关文章

网友评论

      本文标题:【算法】选择排序

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