选择排序
从数组中找一个最小的值或者最大值,依次和后面的元素进行比较,第一轮比较把数组中第一小的数放到数组索引的第一位,第二轮把数组中第二小的数放在数组的第二位,比较的轮数是数组的长度-1,依次类推,直到排序完成为止.
package com.swlz.code; /* * @Author liuzheng * @Date 2021/10/18 22:24 * @Description 选择排序 * @Since version-1.0 */ import java.io.Serializable; import java.util.Arrays; public class SelectSort implements Serializable{ public static void main(String[] args) { //-1,33,78,56,8 -1,8,33,78,56 ..... int[] arr={33,-1,78,56,8}; // System.out.println(arr.length); selectsort(arr); } //从低到高 升序 第一轮是把数组中第一小的找到,第二轮数把数组中第二小的找到,依次类推.直到排序完成为止 public static void selectsort(int[] arr){//外循环控制轮数,内循环控制交换次数 //使用逐步推导的方法 //第一轮33,-1,78,56,8 -> -1,33,78,56,8 比较的总轮数 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++) { //第一轮,如果假定的数不是数组中最小的数 min是数组中的第一位数默认为最小数 arr[j]数组中的第二位数 //如果数组中第一位数大于数组的第二位数,就把第二数赋值给第一位数,依次,循环往复,直到把最小的数放到第一位为止 if (min > arr[j]) {//说明假定的最小值并不是最小的,后面还有比它小的值 如果要从大到小排序改为<即可 min = arr[j];//重置min(最小值) minindex = j;//重置minindex(最小值的索引是这个) } }//将最小值放在arr[0] 即交换(找到最小值做交换)即:33,-1,78,56,8 // 第一轮后:8,-1,78,56,33(找到最小值8和它交换了)第一轮排序之后 //第一轮结束之后,就把最小值放到数组的第一位,然后第一轮就是后面几个数进行比较, // 就把假定最小是是arr[1]第二位数,依次进行比较,依次类推,第二轮的最小的数就是第二位数, //第一轮后将最小值放在第一位,即交换,第二轮就将第二小的数放在第二位,即交换 if (minindex != i) {//minindex=0; 如果最小值的索引不等于i //将最小值放在arr[i] 即交换 arr[minindex] = arr[i];//最小值的索引 把最小值放到第一个位置arr[0] arr[0] arr[i] = min;//arr[0]=min 第一轮 把最小值放在第一位 第一轮 把第二小的值放在第二位 } } System.out.println(Arrays.toString(arr)); } }