用java实现选择排序

选择排序

从数组中找一个最小的值或者最大值,依次和后面的元素进行比较,第一轮比较把数组中第一小的数放到数组索引的第一位,第二轮把数组中第二小的数放在数组的第二位,比较的轮数是数组的长度-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));
    }
}

 

上一篇:python第八天 关于字典的学习


下一篇:2022-2023年英语周报七年级第33期答案汇总