1.时间:2022.03.07
2.目的:作业,学习
3.概念:重复(元素个数-1)次
1.把第一个没有排序过的元素设置为最小值
2.遍历每个没有排序过的元素
3.如果元素 < 现在的最小值
4.将此元素设置成为新的最小值
5.将最小值和第一个没有排序过的位置交换
4.图解概念:
图片来自于:CSDN-----Joy CR的创作。
5.文字思路:
总目标:每一次找到一个最小值与数组索引的第1(index)个位置交换位置(放到排序的起始位置。)
举例数组:int[ ] array = { 5,4,7,2,6}
基础知识:array[0] = 5,array[1] = 4,array[2] = 7,array[3] = 2,array[4] = 6.
第一轮:令array[index] = 5;即index = 0;遍历寻找数组中最小的数,可得当index= 3时,最小值为2。因为2 < 5,所以交换5和2的位置,第一轮排序结束,得到新的排序数组为:{2,4,7,5,6}
第二轮:因为index= 0的位置上的数组已经满足条件,所以我们设index= 1;找到数组中除了array[0] = 2的数中最小的数,可得当array[1] = 4时,即index= 1时最小,又因为4在index= 1的位置上,所以无需交换位置。第二轮循环结束,得到的新排序数组为:{2,4,7,5,6}
第三轮:因为index = 0;index= 1位置上的数组的数已经满足条件,所以我们设index= 2;找到除了array[0] = 2,array[1] = 4以外的数组中的最小值,可得当index= 3时最小。因为5 < 7,所以交换7和5的位置,第三轮结束,得到新的排序数组为:{2,4,5,7,6}
第四轮:因为index= 0 ,1,2位置上的数都满足条件,所以我们设index= 3;找到除了array[0] = 2,array[1] = 4,array[2] = 5以外的数组中的最小值,可得当index= 4时最小。因为6 < 7,所以交换7和6的位置,第四轮结束, 得到新的排序数组为:{2,4,5,6,7}
数组已经全部有序,排序结束!!!
6.代码:
public class slectSort {
public static void main(String[] args) {
int[] array = {3, 7, 2, 9, 6, 4};
for (int i = 0; i < array.length - 1; i++) {
int index = i;//索引
for (int j = i + 1; j < array.length; j++) {
if (array[index] > array[j]) {//找到最小值的索引
index = j;
}
}
//交换,如果数组中的最小数不是第一位,交换
if (index != i) {
int temp;
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
//遍历
for (int k = 0; k < array.length; k++) {
System.out.print(array[k] + " ");
}
}
}
1.理解思路:在每一轮里找到最小值 ,并且与第一个值交换位置(如果第一值不是最小的情况),因此我们需要借助数组下标来找到所需的值并且进行交换。所以我们要先设一个值的数组下标index(第一个进行比较的值),而且这个index还需要一直递增,往后遍历所以我们要第一个for循环来控制index。然后我们需要进行我们的第二步:进行比较,并且找到最小值(j是从i+开始的是因为不需要和第一个数即和本身自己比)。这里我们的找和比较步骤已经完成,所以我们要开始进行交换所以使用一个if语句判断这个最小值是不是我的设置的第一个比较的值(即第一轮中的index= 0),然后进行数值交换。最后在for循环外遍历排序后的数组,进行打印。
7.结尾:
感觉还是自己手动算一遍 ,一遍遍理每一个数的交换和每一轮的排序结果,就会很容易理解这个算法思想,给大家安利个好用的网站有利于理解:VisuAlgo
附手动模拟: