选择排序:
45 32 56 90 21
每一轮里面选最小值和第i个元素进行交换,就是先选第一个为最小值,然后从剩下的选出最小值和第一个选的最小值
进行比较,如果比第一次选的最小值还小就交换
刚开始i = 0(第一轮) min = 45;minIndex = 0; 然后从i + 1这个位置开始往后循环,就是在32和21之间我们找最小值
45和32比较,32小,然后记录min = 32;minIndex =1;56和90明显比32大,到了21这个位置,比31小,所以
min = 21;minIndex = 4 到这步也就是我们把第一轮的最小值找到了,然后45和21进行比较,在进行交换,紧接着
i = 1(第二轮) min = 32 minIndex = 1,就是在56和45间找到最小值,没有,所以32自己就是最小值
i = 2(第三轮)min = 56 minIndex = 2, 就是在90和45找到最小值,90跳过,到45,然后56和45进行交换
i = 3(第三轮)min = 90 minIndex = 3, ..............
每轮循环,交换i的值和minIndex的值
冒泡里面,只要它大于/小于它,就要交换, 计算机系统里比较耗费效率操作就是变量的赋值和变量的操作
50000多次,就是每次交换都要一个临时变量,然后在if里面用完了又销毁,很浪费时间
选择里面,交换次数是固定的和外循环的次数一样的,内循环里没有交换,只是找,赋值操作
public class KuaiSuDemo {
public static void main(String[] args) {
final int N = 10;
int[] nums = new int[N];
for (int i = 0; i < nums.length; i++) {
nums[i] = (int)(Math.random() * 1000) % 201;
}
long startTime = System.currentTimeMillis();
System.out.println("排序前:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t" );
}
System.out.println();
for (int i = 0; i < nums.length; i++) {
int min = nums[i];
int minIndex = i ;
for (int j = i + 1; j < nums.length; j++) {
if(min > nums[j]){
min =nums[j];
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
System.out.println("排序后:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
System.out.println();
long endTime = System.currentTimeMillis();
System.out.println((endTime-startTime) + "毫秒");
}
}