Java实现选择排序(图解+详情)

作者:神秘网友 发布时间:2020-10-29 07:15:11

Java实现选择排序(图解+详情)

Java实现选择排序(图解+详情)

选择排序是一种基础简单的排序方法。

1.遍历数组,假设第一个索引处的元素为最小元素,用min来标记该索引。之后依次和其他索引处的元素进行比较,如果当前索引处元素小于min索引处元素,则修改min值为当前索引。最后可以找到最小值元素的索引
2.交换当前数组中min索引处元素和第一个索引处元素的位置
3.假设数组的大小为n,重复步骤1和步骤2 (n-1)次,可以完成排序
Java实现选择排序(图解+详情)

public class Selection {

    //交换a数组中索引x和索引y处的元素
    private static void exch(Comparable[]a,int x,int y){
        Comparable temp=a[x];
        a[x]=a[y];
        a[y]=temp;
    }
    //判断a元素是否小于b元素
    private static boolean less(Comparable a,Comparable b){
        return a.compareTo(b)<0;
    }

    public static void sort(Comparable[]a){
        final int N=a.length;
        //外层循环次数为N-1次
        for (int i = 0; i <N-1; i++) {
            //min标记最小处元素的索引
            int min=i;
            for (int j =i+1; j <N; j++) {
                if(less(a[j],a[min]))min=j;
            }
            //交换当前第一个索引处的元素和min索引处的元素
            exch(a,i,min);
        }

    }
    public static void main(String[] args) {
        Integer[]a=new Integer[50];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*50);
        }
        System.out.println("排序前");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println("排序后");
        sort(a);
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }
}
  • 时间复杂度:比较次数为(n-1)+(n-2)…+1,交换次数为n-1次;总数为(n+2)(n-1)/2~(n2),因此时间复杂度为O(n2)

Java实现选择排序(图解+详情)相关教程

  1. 【session】Java电商平台开发技能图谱,探秘双十一百万PV

    【session】Java电商平台开发技能图谱,探秘双十一百万PV 您将学习 Java电商平台开发技能图谱,探秘双十一百万PV 分享内容 企业级Java开发技能图谱 从宏观到微观,Java到底怎么学 为了支撑双十一,我们对Java程序做了什么 你将认识 热爱分享的常乐君 开源组织

  2. 简易图书管理系统——Java实现

    简易图书管理系统——Java实现 简易图书管理系统——Java实现 本人还是小白,闲来无事,跟着网络上大牛们学习了这段程序,本身难度并不大,但自己在很多细节地方考虑的还是不够周全,一些功能还未实现,代码的可读性也不是很高,所以还请各位大牛能多指点!

  3. 第一章 JVM与Java体系结构

    第一章 JVM与Java体系结构 文章目录 前言 Java vs C++ 推荐书目 Java 及 JVM 简介 1、Java:跨平台的语言 2、JVM:跨平台的语言 3、字节码 4、多语言混合编程 5、Java发展的重大事件 6、OpenJDK 和 OracleJDK 7、虚拟机与 Java 虚拟机 虚拟机 Java虚拟机 JVM

  4. java的JDBC

    java的JDBC JDBC(Java Data Base Connectivity). 1.下载JDBC-MySQL数据库连接器. https://dev.mysql.com/downloads/connector/j/ 选择第二个. 解压到D:\SQL语句 为了调试程序,可以重新命名为mysqlcon.jar 2.加载JDBC-MySQL数据库连接器 将mysqlcon.jar复制到D

  5. Java中PriorityQueue详解

    Java中PriorityQueue详解 优先队列真香!!!!! Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue

  6. java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppDa

    java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\alglib.dll 文章目录 一、问题 二、分析 1、源码调试 2、.dll文件 2.1、dll是什么 2.2、dll依赖项 3、JNI 4、dll文件缺少依赖项 三、解决 1、下载依赖dll 2、最终解决 一、问题

  7. Java数据结构与算法分析——求两个字符的最大子串

    Java数据结构与算法分析——求两个字符的最大子串 版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 题目分析 在编程之前,我们先来分析题目。 找出两个字符串中的最大子串,即最大的交集。例如:udappyzk和xzhappymol最大子串

  8. 最长公共子序列问题(Java)

    最长公共子序列问题(Java) 动态规范解法思路如下 创建一个二维数组v,数组的大小为(字符串s1的长度+1*字符串s2的长度+1) 第一层循环,遍历字符串s1,第二层循环,遍历字符串s2 如果s1.chatAt(i) == s2.charAt(j): 加入表格的公式为 v[i][j] =v[i-1][j-1]+1; 如