码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】选择排序

时间:2020-01-21 19:53:52      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:mic   过程   min   遍历数组   图片   暴力   void   选择   交换   

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

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

现有一数组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;
}

 

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

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

【算法】选择排序

标签:mic   过程   min   遍历数组   图片   暴力   void   选择   交换   

原文地址:https://www.cnblogs.com/db1995/p/12222777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!