另一个经典排序算法,面试中也经常遇到,下面是详细解析。
算法思想:顾名思义,选择排序的思想是每次都从数组中选出一个最大的数或者最小的数添加到数组的起始位置(或末尾)。现在用升序排序作为例子来讲解,首先我们需要选择一个初始值最小值,一般选待排序的数组的首位作为首次排序的最小值。然后我们循环当前的数组,用数组中的每一位去和当前最小值比较,如果找到更小的数,则将更小的数和当前的最小值交换位置,这样我们变得到了整个数组中最小的数,并且放置到了数组的首位中,接下来我们从第二位开始,用第二位最为最小值去和剩余的数比较,如果有比第二位更小的数,则交换位置,如此循环,即可完成数组的排序。
时间复杂度:时间的开销主要集中在循环比较的次数上,总的次数 = (1+2+3+...+n+1+n),所以时间复杂度也是O(n^2)
代码实现:
/*
* 选择排序
*/
public static void selectSort(int[] numbers){
int temp = 0;
int size = numbers.length;
int min; //定义一个变量保存当前最小值
for(int i = 0;i<size - 1;i++){
min = numbers[i];
for(int j = i;j<size - 1;j++){
if(numbers[j] < min){
temp = numbers[j];
numbers[j] = min;
min = temp;
}
}
}
for(int num : numbers){
System.out.println(" "+num);
}
}
总结:选择排序还是很简单的。