• 选择排序算法


    前言

    选择排序是一种简单直观的排序算法,其算法步骤:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小元素放到已排序序列的末尾,直到所有元素均排序完毕。


    具体实现

    • 实现类
    public class SelectionSort {
    
        /**
         * 私有构造函数,该类不被别人创建,直接使用该类的sort函数
         */
        private SelectionSort(){}
    
        /**
         * 泛型选择排序法
         * 原地排序
         * 于自定义的类,要重写compareTo方法
         * @param arr
         */
        public static <T extends Comparable<T>> void sort(T[] arr) {
            // arr[0...i) 是有序的; arr[i...n) 是无序的
            for (int i = 0; i < arr.length; i++) {
                // 选择 arr[i...n) 中的最小值的索引
                int minIndex = i;
                for (int j = i; j < arr.length; j++) {
                    if (arr[j].compareTo(arr[minIndex]) < 0) {
                        minIndex = j;
                    }
                }
    
                swap(arr, i, minIndex);
            }
        }
    
        /**
         * 交换元素位置
         * @param arr
         * @param i
         * @param j
         */
        private static <T> void swap (T[] arr, int i, int j) {
            T t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    
        public static void main(String[] args) {
            /**
             * 测试一
             */
            Integer[] arr = {1, 4, 2, 3, 6, 5};
            SelectionSort.sort(arr);
            for (int i : arr) {
                System.out.println(i);
            }
    
            /**
             * 测试二 自定义类
             */
            Student[] students = {
                    new Student("张三", 77),
                    new Student("李四", 88),
                    new Student("王二", 99)
            };
    
            SelectionSort.sort(students);
            for (Student student : students) {
                System.out.println(student.toString());
            }
        }
    
    }
    
    • 自定义测试类
    public class Student implements Comparable<Student>{
    
        private String name;
        private int score;
    
        public Student(String name, int score) {
            this.name = name;
            this.score = score;
        }
    
        /**
         * 重写compareTo方法
         * @param another
         * @return
         */
        @Override
        public int compareTo (Student another) {
            // 从小到大排序
            return this.score - another.score;
    
            // 从大到小排序
            // return another.score - this.score;
        }
    
        /**
         * 重写toString方法
         * @return
         */
        @Override
        public String toString () {
            return String.format("Studen(name: %s, socre: %d)", this.name, this.score);
        }
    
    }
    
    - End -
    一个努力中的公众号
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    GroupCoordinator机制
    Consumer 机制
    Producer机制
    Kafka总体介绍
    为什么使用kafka
    消息队列中点对点与发布订阅区别
    为什么使用消息系统
    人生的诗·290~294节
    唐诗宋词学习·141~145节
    人生的诗·295~299节
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/14852967.html
Copyright © 2020-2023  润新知