1.普通选择排序
//普通选择排序
public static void sort1(int[] array){
int count = 0;//统计运行次数
int cnt = 0; //交换次数
for(int i=0;i<array.length-1;i++) {
int min=array[i];
int minIndex=i;
count++;
for(int j=i+1;j<array.length;j++){
if(min>array[j]) {
min=array[j];
minIndex=j;
}
}
if(minIndex!=i){
cnt++;
array[minIndex]=array[i];
array[i]=min;
}
}
System.out.println(Arrays.toString(array));
System.out.println("运行次数:"+count+"次 交换次数:"+cnt);
}
2.优化选择排序
import java.util.Arrays;
import java.util.Random;
/**
* 选择排序优化
*/
class SelectionSort2 {
public static void main(String[] args) {
//产生一个随机数组
Random r = new Random();
int arr[] = new int[2000];
for(int i=0;i<arr.length;i++){
arr[i] =r.nextInt(1000);
}
//因为本优化版本每次循环找出最大以及最小值,所以执行执行:arr.length/2
int ArrLength = (arr.length/2);
int temp1,temp2;
long count = 0;
//记录开始时间
long startStamp = System.currentTimeMillis();
//算法开始
for(int j=0;j<ArrLength;j++){
int minIndex = j;
int maxIndex= j;
for(int i=j;i<arr.length-j;i++){
if (arr[minIndex] > arr[i]) {
minIndex = i;
}
if (arr[maxIndex] < arr[i]) {
maxIndex= i;
}
count++;
}
temp1 = arr[minIndex];
arr[minIndex] = arr[j];
arr[j] = temp1;
if(j!=maxIndex) { //maxIndex不能再原本的minIndex位置上
temp2 = arr[maxIndex];
arr[maxIndex] = arr[arr.length - j - 1];
}else{
temp2 = arr[minIndex];
arr[minIndex] = arr[arr.length - j - 1];
}
arr[arr.length - j - 1] = temp2;
}
//计算算法结束时间
long endStamp = System.currentTimeMillis();
System.out.println("用时总长:"+(endStamp-startStamp));
System.out.println("循环次数:"+count);
System.out.println(Arrays.toString(arr));
}
}