选择排序
选择排序
遍历数组将最小的下表找出来 与第一个数组下标元素互换
此时第一个元素为最小,在下个元素开始重复次操作
import java.util.Arrays;
//选择排序
public class SelectedSort {
//测试
public static void main(String[] args) {
//定义一个数组
int[] arr = DataChecker.generaRandomArray(10,100);
System.out.println(Arrays.toString(arr));
sort(arr);
System.out.println("Selected sort after:");
System.out.println(Arrays.toString(arr));
}
/**
* @param arr int[]
* @param i 需要交换的数组下标
* @param j 同上
*/
public static void swap(int[] arr,int i,int j){
//交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/**
*
* @param arr int[]
* 对数组进行选择排序
*/
public static void sort(int[] arr){
for (int i = 0; i < arr.length; i++) {
//找到数组种最小的下标,默认是0
int minPosition = i;
//找到数组种最小值的index
for (int j = i+1; j <arr.length ; j++) {
if (arr[j] < arr[minPosition]) {
//将小的下标赋值给minPosition
minPosition = j;
}
}
//交换
swap(arr,i,minPosition);
}
}
}

这里的DataChecker.class 是对数器 ,判断算法是否正确
import java.util.Arrays;
import java.util.Random;
//对数器
public class DataChecker {
/**
* @param size 数组大小
* @return 随机数组
*/
public static int[] generaRandomArray(int size){
return generaRandomArray(size,size);
}
/**
*
* @param size size 数组的大小
* @param randomSize 随机数值的大小
* @return int[]
*/
public static int[] generaRandomArray(int size,int randomSize){
Random random = new Random();
int[] arr = new int[size];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(randomSize);
}
return arr;
}
/**
*
* @param arr1 int[]
* @param arr2 int[]
* @return 比较两个数组的值是否相同
*/
public static boolean check(int[] arr1,int[] arr2){
//工具类进行排序
Arrays.sort(arr1);
//选择排序
SelectedSort.sort(arr2);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]){
return false;
}
}
return true;
}
//测试
public static void main(String[] args) {
//存储正确的次数
int right = 0;
for (int i = 0; i < 10000; i++) {
System.out.println("第"+i+"次随机生成进行比较 ");
int[] arr1 = DataChecker.generaRandomArray(100);
int[] arr2 = Arrays.copyOf(arr1,arr1.length);
if (check(arr1,arr2)) right++;
}
System.out.println("right: " + right);
}
}
这里进行10000次测试 需要多测,来判断算法的正确性


浙公网安备 33010602011771号