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)); } }