一.原理
1.1.动态演示图
1.2.演示图讲解
选择排序对数组进行遍历,获取数组中最小值的角标,若当前遍历的角标与最小值的角标不同,就将对应的角标值进行交换。
1.3.数据演示
原始数组:8 4 7 10 6 5 4 8
第一次排序:4 8 7 10 6 5 4 8
第二次排序:4 4 7 10 6 5 8 8
....
二.代码实现
public class ArraySortUtils { /** * 返回数组的字符串 * @param array * @return */ public static String arrayToString(int[] array){ StringBuilder sb = new StringBuilder("["); for (int i = 0; i < array.length; i++) { if( i != (array.length - 1)){ sb.append(array[i] + ","); }else{ sb.append(array[i] + "]"); } } return sb.toString(); } /** * 选择排序 * @param array */ public static void selectSort(int[] array){ //遍历数组 for(int i = 0; i < array.length; i++){ //默认最小角标为当前遍历元素角标 int min = i; //获取到数据最小的角标 for(int j = i + 1; j < array.length; j++){ if(array[min] > array[j]){ min = j; } } //判断最小角标与当前角标是否相同,若不相同就进行交换元素 if(min != i){ int temp = array[min]; array[min] = array[i]; array[i] = temp; } System.out.println("第" + (i+1) + "次排序结果: " + arrayToString(array)); } } }
三.演示结果
public class ArraySortUtilsDemo { public static void main(String[] args) { //4 8 7 10 6 5 4 8 //4 4 7 10 6 5 8 8 int[] array = new int[]{8,4,7,10,6,5,4,8}; System.out.println("排序前:" + ArraySortUtils.arrayToString(array)); //ArraySortUtils.bubbleSort(array); //ArraySortUtils.quickSort(array); //ArraySortUtils.insertSort(array); //ArraySortUtils.shellSort(array); ArraySortUtils.selectSort(array); System.out.println("排序后:" + ArraySortUtils.arrayToString(array)); } }
演示结果:
排序前:[8,4,7,10,6,5,4,8]
第1次排序结果: [4,8,7,10,6,5,4,8]
第2次排序结果: [4,4,7,10,6,5,8,8]
第3次排序结果: [4,4,5,10,6,7,8,8]
第4次排序结果: [4,4,5,6,10,7,8,8]
第5次排序结果: [4,4,5,6,7,10,8,8]
第6次排序结果: [4,4,5,6,7,8,10,8]
第7次排序结果: [4,4,5,6,7,8,8,10]
第8次排序结果: [4,4,5,6,7,8,8,10]
排序后:[4,4,5,6,7,8,8,10]
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!