选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.
public static void selectionSort(int[] arr){
int min;
int max;
int count = arr.length;
for (int i = 0; i < count; i++) {
// 初始化未排序序列中最小数据数组下标
min = i;
// 初始化未排序序列中最大数据数组下标
max = count - 1;
for (int j = i; j < count; j++) {
// 在未排序元素中继续寻找最小元素,并保存其下标
if(arr[min] >= arr[j]){
min = j;
}
// 在未排序元素中继续寻找最大元素,并保存其下标
if(arr[max] <= arr[j]){
max = j;
}
}
// 将未排序列中最小元素放到已排序列头
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
// 将未排序列中最大元素放到已排序列尾
if(max != count - 1){
int temp = arr[count - 1];
arr[count - 1] = arr[max];
arr[max] = temp;
}
count--;
}
}