选择排序算法的思路(升序排序):
(1)将第一位看成最小值,遍历找出最小值和第一位进行交换
(2)再将第二位看成最小值,遍历找出次小值和第二位进行交换
重复以上步骤直到整个数组有序。
//选择排序算法
public static void SolutionSort(){
int array[] = {20, 25, 12, 58, 32};
for (int i = 0; i < array.length; i++) {//表示需要排序的次数
for (int j = 1; j < array.length; j++) {//表示每次排序需要比较的次数
int k = j-1;//设置一个变量k记录最小值的下标
if (array[j-1] > array[j ]) {
k = j ;
}
//如果找到的最小值小于默认最小值,将找到的最小值与默认最小值交换
if (array[k] < array[j-1]) {
int temp = array[k];
array[k] = array[j-1];
array[j-1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
//选择排序算法分解
public static void SolutionSortPart() {
int array[] = {20, 25, 12, 58, 32};
System.out.println("第一次排序");
//默认第一个元素为最小值
//从第2个元素(下标1)开始,依次向后寻找最小值,找到则与默认最小值交换
for (int i = 1; i < array.length-1; i++) {//比较3次
int k = i;//设置一个变量k记录最小值的下标
if (array[i] > array[i + 1]) {
k = i + 1;
}
//如果找到的最小值小于默认最小值,将找到的最小值与默认最小值交换
if (array[k] < array[0]) {
int temp = array[k];
array[k] = array[0];
array[0] = temp;
}
}
System.out.println(Arrays.toString(array));
System.out.println("第二次排序");
//默认第二个元素最小,从第三个依次向后比较
for (int i = 2; i < array.length-1; i++) {//比较2次
int k = i;//设置一个变量k记录最小值的下标
if (array[i] > array[i + 1]) {
k = i + 1;
}
//如果找到的最小值小于默认最小值,将找到的最小值与默认最小值交换
if (array[k] < array[1]) {
int temp = array[k];
array[k] = array[1];
array[1] = temp;
}
}
System.out.println(Arrays.toString(array));
System.out.println("第三次排序");
//默认第三个元素最小,从第四个依次向后比较
for (int i = 3; i < array.length-1; i++) {//比较1次
int k = i;//设置一个变量k记录最小值的下标
if (array[i] > array[i + 1]) {
k = i + 1;
}
//如果找到的最小值小于默认最小值,将找到的最小值与默认最小值交换
if (array[k] < array[2]) {
int temp = array[k];
array[k] = array[2];
array[2] = temp;
}
System.out.println(Arrays.toString(array));
}
System.out.println("第四次排序");
int i=4;
int k=i;
if (array[k] < array[i-1]) {//比较第四个元素与第五个元素,若第四个小则交换
int temp = array[k];
array[k] = array[i-1];
array[i-1] = temp;
}
System.out.println(Arrays.toString(array));
}