算法选择排序

Posted db1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法选择排序相关的知识,希望对你有一定的参考价值。

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

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

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

技术图片

代码如下:

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;
}

 

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

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

以上是关于算法选择排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

选择排序(简单选择排序堆排序的算法思想及代码实现)

《算法》笔记 3 - 选择排序插入排序希尔排序

python学习选择排序算法简单代码

Java数据结构—排序算法