SelectionSorting.java
package com.zhanglei.selectionsorting;
public class SelectionSorting {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a=new int[] {2,1,3,6,5,4};
int index=0;//用于指示最小值的索引
for(int i=0;i<a.length-1;i++) {//外循环用于将内循环得到的最值与当前的a[i]进行位置交换
int min=a[i];
for(int j=i;j<a.length;j++) {//易错点:内循环要保证能取到数组的最后一个元素,注意与冒泡的区别
if(a[j]<min) {//内循环用于将本次内循环的最值找出来
min=a[j];
index=j;
}
}
if(a[i]!=min) {
int temp1=a[i];
a[i]=a[index];
a[index]=temp1;
}
}
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}
运行结果:
1 2 3 4 5 6
备注:
- 刚开始的时候以为这就是冒泡(大一的时候吧)
- 冒泡是右边逐渐固定,选择是左边逐渐固定
- 选择排序就是遍历第一遍找到最小值后将其与第一个数值进行交换,遍历第二遍的时候找到剩余元素的最小值再与第二个数值进行交换,以此类推
SelectionSortingSpeedMeasuring.java
package com.zhanglei.selectionsorting;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SelectionSortingSpeedMeasuring {
public static void main(String[] args) {
// TODO Auto-generated method stub
int maxsize=80000;
int[] a=new int[maxsize];
for(int i=0;i<a.length;i++) {
a[i]=(int)(Math.random()*8000000);//output is in range of [0,8000000)
}
Date date=new Date();
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String s1=sd.format(date);
System.out.println("Before BubbleSorting:"+s1);
selectSort(a);//参数为引用类型,故可以形参变,实参也跟着变
Date date1=new Date();
String s2=sd.format(date1);
System.out.println("After BubbleSorting:"+s2);
}
public static void selectSort(int[] a) {
int index=0;//用于指示最小值的索引
for(int i=0;i<a.length-1;i++) {//外循环用于将内循环得到的最值与当前的a[i]进行位置交换
int min=a[i];
for(int j=i;j<a.length;j++) {//易错点:内循环要保证能取到数组的最后一个元素,注意与冒泡的区别
if(a[j]<min) {//内循环用于将本次内循环的最值找出来
min=a[j];
index=j;
}
}
if(a[i]!=min) {
int temp1=a[i];
a[i]=a[index];
a[index]=temp1;
}
}
}
}
运行结果:
Before BubbleSorting:2021-03-22 15-30-17
After BubbleSorting:2021-03-22 15-30-18
可以看到选择排序明显比冒泡要快的多,
冒泡9秒,选择1秒