Java 十大排序算法之选择排序刨析

 更新时间:2021年11月18日 09:42:12   作者:龍弟-idea  
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧

选择排序原理

①假设第一个索引处的元素为最小值,和其他值进行比较,如果当前的索引处的元素大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后找到最小值所在的索引

②交换第一个索引处和最小值所在的索引处的值

选择排序API设计

类名 Selection
构造方法 Selection():创建Selection对象
成员方法

1.public static void sort(Comparable[] a):对数组内的元素进行排序

2.private static boolean greater(Comparable v,Comparable w):判断v是否大于w

3.private static void exchange(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值

选择排序代码实现

public class Selection {
    //对数组a中的元素进行排序
    public static void sort(Comparable[] a){
        for(int i=0;i<a.length-2;i++){
            int minIndex=i;
            for(int j=i+1;j<a.length;j++){
                if(greater(a[minIndex],a[j])){
                    minIndex=j;
                }
            }
            exchange(a,i,minIndex);
        }
    }
    private static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }
    private static void exchange(Comparable[] a,int i,int j ){
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
}
class Test{
    public static void main(String[] args) {
        Integer[] a={4,6,8,7,9,2,10,1};
        Selection.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

选择排序的时间复杂度

选择排序使用了双层for循环,外层循环完成了数据交换,内层循环完成了数据比较,所以分别统计:数据比较次数:(N-1)+(N-2)+(N-3)+...+2+1=

\frac{}{}

((N-1)+1)*(N-1)/2=N^2/2-N/2;

数据交换次数:N-1;

时间复杂度: N^2/2-N/2+(N-1)=N^2/2+N/2-1;

根据大O推导法则,保留最高阶项,去除常数因子,时间复杂度为O(N^2)

到此这篇关于Java 十大排序算法之选择排序刨析的文章就介绍到这了,更多相关Java 选择排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • eclipse实现可认证的DH密钥交换协议

    eclipse实现可认证的DH密钥交换协议

    这篇文章主要介绍了eclipse实现可认证的DH密钥交换协议,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Java的springcloud Sentinel是什么你知道吗

    Java的springcloud Sentinel是什么你知道吗

    这篇文章主要介绍了Java之springcloud Sentinel案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java基础之代码死循环详解

    Java基础之代码死循环详解

    这篇文章主要介绍了Java基础之代码死循环详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • java跳出for循环的三种常见方法

    java跳出for循环的三种常见方法

    这篇文章主要给大家介绍了关于java跳出for循环的三种常见方法,需要的朋友可以参考下
    2023-07-07
  • 使用IDEA配置Maven搭建开发框架ssm教程

    使用IDEA配置Maven搭建开发框架ssm教程

    这篇文章主要为大家详细介绍了使用IDEA配置Maven搭建开发框架ssm教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • idea无法切换分支报错问题及解决

    idea无法切换分支报错问题及解决

    这篇文章主要介绍了idea无法切换分支报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java如何将若干时间区间进行合并的方法步骤

    Java如何将若干时间区间进行合并的方法步骤

    这篇文章主要介绍了Java如何将若干时间区间进行合并的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • SpringMVC上传文件FileUpload使用方法详解

    SpringMVC上传文件FileUpload使用方法详解

    这篇文章主要为大家详细介绍了SpringMVC上传文件FileUpload的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 一文详解Maven的setting文件

    一文详解Maven的setting文件

    maven 是目前java 常见的一款包管理工具,通过 maven 我们可以很方便的对项目进行编译、打包、部署等操作,本文将详细带大家了解一下Maven setting文件,需要的朋友可以参考下
    2024-02-02
  • Mybatis 多对一查询的实现方法

    Mybatis 多对一查询的实现方法

    这篇文章主要介绍了Mybatis 多对一查询,本文通过场景分析示例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02

最新评论