前言:有时候,我会觉得,凡事只要有个目标,便可以朝着它努力,这样必定会有结果;可是,慢慢的我发现,在生活中,太多的我们追求的事情,是没有目标的,这也正是我现阶段困惑的东西,我只能一步步的去试探,试图发现个规律。
虽然没有明确的目标,但是我还是要继续加油,对吧?
基本思想:
在排序的一组数中,选出最小的数与第一个数互换,如果本身就是则保持原位,接着再重剩下的数中选出最小的数与第二个数互换,直到最后两个数为止。
大概流程图如图所示:
java代码实现:
import java.util.Scanner;
public class SelectSort {
public static void main(String[] args) {
int[] numbers = new int[5];
Scanner scanner = new Scanner(System.in);
for(int i=0;i<numbers.length;i++){
numbers[i] = scanner.nextInt();
}
selectSort(numbers);
for(int j =0;j<numbers.length;j++){
System.out.print(numbers[j]+",");
}
}
public static void selectSort(int[] numbers){
int size = numbers.length;
int temp = 0;
for(int i =0;i<size-1;i++){
int k = i;
for(int j=size-1;j>i;j--){
if(numbers[j]<numbers[k]){
k = j;
}
}
temp = numbers[i];
numbers[i] = numbers[k];
numbers[k]= temp;
}
}
}
举例运行:
输入:9,4,8,3,6
输出:3,4,6,8,9
时间复杂度O(n*n) 性能上优于冒泡排序 交换次数少
因为冒泡排序法每次循环都要判断是否较大(较小)然后进行交换,而选择排序法则只需选中最小的数与第一个数进行交换,循环下去,所以节省了许多交换次数。
我们可以看下有人做出的时间计算数据:
从图中我们可以看出:当数组长度到达一定数目,冒泡排序的性能明显低于选择排序。