import java.util.Arrays;
import static cn.linglongfang.algorithm.sort.T00_Utils.*;
/**
* 选择排序:
* 遍历数组,选第i~n位置最小的数和第i个数交换
* 基位置i不断变大,前面的第i个数都是排序好的。
*
* 时间复杂度: O(n^2)
* 空间复杂度: O(1)
* 常数时间: O(n^2)比较,O(n)交换
*
* @author Linglong Fang
*/
public class T01_SelectionSort {
public static void main(String[] args){
final int NUM = 50_0000;
final int maxSize = 100;
final int maxValue = 100;
boolean success = true;
for (int i = 0; i < NUM; i++){
int[] arr = generateRandomArray(maxSize, maxValue);
int[] arr1 = copyArray(arr);
int[] arr2 = copyArray(arr);
selectionSort(arr1);
Arrays.sort(arr2);
if (!isEquals(arr1,arr2)){
success = false;
System.out.println("原始数组:"+Arrays.toString(arr));
System.out.println("自定义排序:"+Arrays.toString(arr1));
System.out.println("系统排序:"+Arrays.toString(arr2));
break;
}
}
if (success){
System.out.println("很好,你的算法正确");
}else{
System.out.println("你可真是一个小垃圾");
}
}
/**
* 选择排序
* @param array
*/
public static void selectionSort(int[] array){
/**
* 0 ~ n-1 最小放在0上
* 1 ~ n-1 最小放在1上
* 2 ~ n-1 最小放在1上
* ··· ···
* n-2 ~ n-1 最小放在1上
*/
for (int i = 0; i < array.length-1; i++) {
int minIndex = i;
for (int j = i+1; j < array.length; j++){
if (array[minIndex] > array[j]){
minIndex = j;
}
}
sweep(array,i,minIndex);
}
}
}