排序:Java实现选择排序原理及代码注释详解

简介: 排序:Java实现选择排序原理及代码注释详解

选择排序


1.简介:


选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。它的最坏、最好、平均时间复杂度均为为O(n2),选择排序是不稳定的排序方法。


2.算法原理:


首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

结合动态图理解一下:


20190715200345533.gif


(图片来源:十大经典排序算法(动图演示))


3.代码实现:


选择排序大体思路就是一次循环找到最小或最大的,然后放在最前或最后面。


我是在循环中找到较小的数,记录其下标,等一次循环结束后再交换。


还有一种思路是找到较小的数两数交换,一次循环结束时,可能交换次数不止是一次,这种思路有点冒泡的感觉,并且其时间复杂度的系数较高。


    public static void xuanZe(int[] a){
        for(int i = 0;i < a.length-1;i++) {
            int temp=0,min = i;
            for(int j = a.length-1;j > i;j--) {
                if(a[j] < a[min]){
                    min = j;
                }
            }
            temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }

测试一波:

package sort;
/**
 * @author yzh
 * @date 2019-07-15 17:12
 */
public class XuanZe {
    public static void xuanZe(int[] a){
        for(int i = 0;i < a.length-1;i++) {
            int temp=0,min = i;
            for(int j = a.length-1;j > i;j--) {
                if(a[j] < a[min]){
                    min = j;
                }
            }
            temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
    public static void main(String[] args) {
        int[] a = {4,97,64,3,19,-7,78,0,-90};
        xuanZe(a);
        for(int i = 0;i < a.length;i++){
            System.out.println(a[i]);
        }
    }
}

测试结果image.png


4.优缺点:


优点:移动数据的次数已知(n-1 次);

缺点:比较的次数多,效率慢,不稳定(举个例子5,8,5,2,9 我们知道第一遍选择第一个元素5会和2交换,那么原序列中2个5的相对位置前后顺序就破坏了)。

目录
相关文章
|
18天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
47 24
|
15天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
49 5
|
15天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
44 5
|
17天前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
21天前
|
Java API Maven
商汤人像如何对接?Java代码如何写?
商汤人像如何对接?Java代码如何写?
30 5
|
14天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。
|
19天前
|
Java
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
25 0
|
4月前
|
搜索推荐 算法 Java
|
4月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
6月前
|
存储 搜索推荐 算法
十大排序算法(java实现)(二)
十大排序算法(java实现)(二)