目录
介绍
选择排序就是按照某种指定规则选出某一元素,并依规定交换位置达到排序目的
选择排序思路分析图解
对一个数组进行选择排序分析
选择排序的推导
/* * 选择排序思路分析:选择排序就是从原数组中一次一次选择最小的放在数组的最前面 * 我们先假设第一个元素为最小,并设定一个最小值和最小索引,把第一个元素内容对应赋给最小值和最小索引 * 然后用一层循环遍历判断假设的最小值和其他的元素找到最小并与第一个元素交换,第二轮排序从第二个数开始重复以上步骤直到倒数第二数 * */
第一轮排序
//第一轮排序
public static void SelectSort1(int[] arr) {
int min = arr[0];//假设第一个数最小
int minIndex = 0;//将假设的最小值的索引对应赋给最小索引
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i]; //重置min
minIndex = i;//重置minIndex
}
}
//for循环结束后,min就是原数组的最小值,minIndex为对应索引
//将最小的那个数和第一个进行交换
if (minIndex != 0) {
arr[minIndex] = arr[0];
arr[0] = min;
}
}
第二轮排序分析
//第二轮排序
public static void SelectSort2(int[] arr) {
int min = arr[1];//假设第二个数最小
int minIndex = 1;//将假设的最小值的索引对应赋给最小索引
for (int i = 2; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
minIndex = i;
}
}
//for循环结束后,min就是原数组的最小值,minIndex为对应索引
//将最小的那个数和第一个进行交换
if (minIndex != 1) {
arr[minIndex] = arr[1];
arr[1] = min;
}
}
由此我们会发现规律从而可以得到选择排序的代码
选择排序具体代码
public static void SelectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int min = arr[i];//假设第一个数最小
int minIndex = i;//将假设的最小值的索引对应赋给最小索引
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
//for循环结束后,min就是原数组的最小值,minIndex为对应索引
//将最小的那个数和第一个进行交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println("第"+(i+1)+"轮后~~" + Arrays.toString(arr));
}
}
minIndex != i 是对选择排序进行的优化,有时候假设最小的值就是某一轮中最小的值,这个时候就不需要进行交换操作