选择排序两种实现方式:
//选择排序 递归方式
public static void selectSort(int[] arr, int begin) {
if(ArrayUtil.isNotNullAndZero(arr)){
//当开始下标为下标最后一位时,递归回溯
if (begin == arr.length - 1) {
return;
}
int min = arr[begin]; //最小值默认为开始下标的元素
int minIndex = begin; //最小值下标
int temp = arr[begin]; //开始下标对应的值
for (int i = begin+1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
minIndex = i;
}
}
//交换
arr[begin] = min;
arr[minIndex] = temp;
//本轮循环结束后开始下轮循环,下轮循环的开始下标为本轮循环的开始下标+1
selectSort(arr, begin + 1);
}
}
//选择排序 双重for循环
public static void selectSort2(int[] arr){
if(ArrayUtil.isNotNullAndZero(arr)){
int temp; //用于实现交换的临时变量
int minIndex; //最小值的下标
//外循环记录每一轮遍历的开始下标,并控制循环的次数
for (int i = 0; i < arr.length; i++) {
minIndex = i; //默认最小值下标为本轮遍历的开始下标
//内循环找出本轮循环的最小值的下标
for (int j = i+1; j < arr.length; j++) {
if(arr[j]<=arr[minIndex]){
minIndex = j;
}
}
//找到最小值下标之后进行数据的交换
if(minIndex != i){
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}