这是我参与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语句逻辑也应该能够看懂。我们并不需要背下来去面试。我们只需要知道原理,就能简单地将它写出来。
想要学习更多算法问题,或者要更多项目源码,请移步到公众号:诗一样的代码。
既然进来了,原创不易。小伙伴点个赞再走呗。