算法实现思想:
选择排序一共排序了n-1轮。
for (int i = 0; i < arr.length - 1; i++) { }
定义变量min来记录每轮中需要比较序列中的最小数,变量minIndex记录每轮中最小数的下标.
int min = arr[i]; int minIndex = i;
第i轮,将第i个数赋给min,然后从下标为i+1的位置开始,遍历后续元素,让它们跟min比较。如果比min小,则将其值赋给min,并用minIndex记录其下标。如果比min大,则遍历下一个元素,直至找到最小数。
for(int j = i + 1; j < arr.length; j++) { //每一轮的比较 if(min > arr[j]){ //将min和遍历的元素比较,比min小则将其值赋给min,并记录最小数的下标minIndex min = arr[j]; minIndex = j; } }
对无序序列{-4, 5, 7, 1, 3}采用简单选择排序算法进行排序,具体过程为:
第1轮:取-4赋给min,此时min的下标为0。从下标为1位置即5开始遍历,逐个和min进行比较,找出最小的数,并将其和第一个元素交换。这里由于-4就是最小数,所以-4还是在第一个位置。所以第1轮的结果为:{-4, 5, 7, 1, 3}
第2轮:取5赋给min,此时min的下标为1。从下标为2位置即7开始遍历,逐个和min进行比较,找出最小的数,并将其和第一个元素交换。遍历完后可以确定最小数min=1,下标为3,然后将下标为1和下标为3的数交换位置。所以第2轮的结果为:{-4, 1, 7, 5, 3}
第3轮:{-4, 1, 3, 5,7}
第4轮:{-4, 1, 3, 5, 7}
public class SimpleSelectionSort { public static void main(String[] args) { int[] arr = {-4, 5, 8, 6, 3, 9, 2, 1, 7}; simpleSelectionSort(arr); System.out.println(Arrays.toString(arr)); } private static void simpleSelectionSort(int[] arr){ for (int i = 0; i < arr.length - 1; i++) { //选择排序的轮数(n-1轮) int min = arr[i]; //定义min存放每轮比较的最小数,先将每轮比较的第一个数赋给min int minIndex = i; //定义minIndex存放每轮比较的最小数的下标,先将每轮比较的第一个数的下标赋给minIndex for (int j = i + 1; j < arr.length; j++) { //遍历寻找每轮的最小数 if(min > arr[j]){ //将min和遍历的元素比较,比min小则将其值赋给min,并记录最小数的下标minIndex min = arr[j]; minIndex = j; } } arr[minIndex] = arr[i]; //将每轮的第一个元素放到minIndex位置 arr[i] = min; //将min的值放到每轮的第一个元素位置 } } }
https://www.bilibili.com/video/BV1dV411U7VN?p=4
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)