【面试算法】选择排序详解| 8月更文挑战

310 阅读2分钟

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

想要坚持写点什么,那干脆写一个系列吧。想想有什么可以写的呢?程序=算法+数据结构,可见算法的重要性。这个系列老诗力求用最简单的语言把算法讲得明明白白,由浅到深,有兴趣的话,可以关注一下专栏。

在面试中,经常会考到选择排序算法,而且还是让你现场手写的那种。对于初入职场的同学们一定要在这一方面做好准备。

选择排序算法描述

选择排序是和冒泡排序差不多的一种排序。和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换。选择排序就是遍历一遍序列,然后找出最大/最小的数出来,记录下来,然后再和最后一个数进行交换。

选择排序例子

3, 0, 8, 4, 10

第一次排序:0, 3, 8, 4, 10

第二次排序: 0, 3, 8, 4, 10

第三次排序: 0, 3, 4, 8, 10

第四次排序: 0, 3, 4, 8, 10

那么从上面的排序步骤可以看到,选择排序应该是这样的:

(1)每次排序的时候都需要寻找第n小的数据,并且和a[n-1]进行交换

(2)等到n个数据都排序好,那么选择排序结束。

选择排序实现

public static void selectionSort(int[] arr){                
    for(int i = 0; i < arr.length - 1; i++){
        // 交换次数         
        // 先假设每次循环时,最小数的索引为i            
        int minIndex = i;// 每一个元素都和剩下的未排序的元素比较          
        for(int j = i + 1; j < arr.length; j++){             
            if(arr[j] < arr[minIndex]){//寻找最小数                   
                minIndex = j;//将最小数的索引保存                
            }           
        }//经过一轮循环,就可以找出第一个最小值的索引,然后把最小值放到i的位置           
        swap(arr, i, minIndex);         
    }   
}
 
private static void swap(int[] arr, int i, int j) {     
    int temp = arr[i];      
    arr[i] = arr[j];        
    arr[j] = temp;          
}

上面的代码是用java写的。我们写代码不局限于语言,即使直接看for语句逻辑也应该能够看懂。我们并不需要背下来去面试。我们只需要知道原理,就能简单地将它写出来。

想要学习更多算法问题,或者要更多项目源码,请移步到公众号:诗一样的代码

既然进来了,原创不易。小伙伴点个赞再走呗