zoukankan      html  css  js  c++  java
  • 选择排序算法

    前言

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


    具体实现

    • 实现类
    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
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    mysql远程访问设置
    LUA Userdata
    LUA 面向对象
    LUA table中函数的调用
    LUA 元表
    LUA table
    hibernate3 和hibernate4的一点小变动
    java 关键字final
    MySQL oracle 分页
    Java后端开发书架
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/14852967.html
Copyright © 2011-2022 走看看