将每一遍的最小值放到第一个值的位置.
这里是[9,1,5,8,3,7,4,6,2,10] 排序的例子.
1.遍历数组记录最小值(动图中的红色部分) 2.遍历完成后将最小值放到前面(将最小值和前面的值进行交换) 3.重复1,2步骤,排序完成.
java代码实现
public static int[] chooseSort(int[] arrays) { for (int i = 0; i < arrays.length; i++) { //这里对min 赋予初值 int minIndex = i; int min = arrays[minIndex]; for (int j = i + 1; j < arrays.length; j++) { // 如果出现更小的值就将最下值赋值给它 if (arrays[j] < min) { min = arrays[j]; minIndex = j; } } //最后将最小值移动到最开始的位置. arrays[minIndex] = arrays[i]; arrays[i] = min; } return arrays; }拓展,我们可以按照这个思路参考冒泡排序将最大值放到最后代码如下
public static int[] chooseSort(int[] ints) { for (int i = 0; i < ints.length; i++) { //这里对max赋予初值 int maxIndex = 0; int max = ints[maxIndex]; for (int j = 0; j < ints.length - i; j++) { // 如果出现更大值就将最大值赋值为更大值 if (max < ints[j]) { max = ints[j]; maxIndex = j; } } //最后将最大值移动到最后的位置 int temp = ints[ints.length - 1 - i]; ints[ints.length - 1 - i] = max; ints[maxIndex] = temp; } return ints; }优点
算法类似冒泡排序但是减少冒泡排序的如此频繁的值的交换和冒泡排序一样简单易理解*缺点
时间复杂度 O (n2)