美文网首页
Java简单排序之选择排序

Java简单排序之选择排序

作者: 越努力越幸运阳 | 来源:发表于2020-04-13 18:23 被阅读0次

排序原理:

1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引
2.交换第一个索引处和最小值所在的索引处的值

图片展示选择排序.png

代码实现:

    public static void selectionSort(int[] a) {
        System.out.println("待排序数据: " + Arrays.toString(a));
        for (int i = 0; i < a.length - 1; i++) {
            //默认把数据的第一个元素当做最小值
            int minIndex = i;
            //每次排完序之后,第一个元素就是最小值了,所以每次比较的起始位置为i+1
            for (int j = i + 1; j < a.length; j++) {
                if (a[minIndex] > a[j]) {
                    //如果有比最小值小的,把当前index赋值给最小值
                    minIndex = j;
                }
            }
            if (minIndex != i) {//如果最小索引和当前遍历的索引一样,则不需要交换位置
                int temp = a[i];
                a[i] = a[minIndex];
                a[minIndex] = temp;
            }
            System.out.println("第" + (i + 1) + "轮排序后的数组为: " + Arrays.toString(a));
        }
    }
排序结果:
待排序数据: [4, 5, 6, 3, 2, 1]
第1轮排序后的数组为: [4, 5, 3, 2, 1, 6]
第2轮排序后的数组为: [4, 3, 2, 1, 5, 6]
第3轮排序后的数组为: [3, 2, 1, 4, 5, 6]
第4轮排序后的数组为: [2, 1, 3, 4, 5, 6]
第5轮排序后的数组为: [1, 2, 3, 4, 5, 6]

选择排序的时间复杂度分析:

选择排序使用了双层for循环,其中外层循环完成了数据交换,内层循环完成了数据比较,所以我们分别统计数据 交换次数和数据比较次数:
数据比较次数:
(N-1)+(N-2)+(N-3)+...+2+1=((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实现 简单选择排序(SelectSort) 选择排序思想很简单,对所有元素进行遍历,选出最小...

  • 排序算法的实现

    用java对常用内部排序算法的实现。 对冒泡排序,简单选择排序,直接插入排序,希尔排序,归并排序的简单实现(缺少快...

  • 3.1-选择排序-简单选择排序

    参考链接 选择排序:简单选择排序(Simple Selection Sort) 白话经典算法系列之四 直接选择排序...

  • Java简单排序之选择排序

    排序原理: 1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处...

  • 五种常见排序算法实现(Java)

    Java-五种排序算法实现 前言及准备 这篇我们会介绍比较简单的五种排序算法:插入排序、冒泡排序、快速排序、选择排...

  • Java技术文章

    Java String 对 null 对象的巧妙处理 Java static 初始化顺序 简单排序之冒泡、选择、插...

  • 算法理解之排序-选择排序

    算法理解之排序-选择排序 选择排序是一种简单直观的排序算法, 以当前点为锚点, 向后依次进行比较所有未排序元素, ...

  • 常用排序算法(Python实现), 持续更新中

    一、非线性时间比较类排序 交换排序冒泡排序快速排序 插入排序简单插入排序希尔排序 选择排序简单选择排序堆排序 归并...

  • 数据结构之排序

    选择排序1.直接选择排序 原理直接选择排序过程直接选择排序过程 实现: DataWrap.java来模拟待排序的数...

  • java-四种排序算法

    复习java基础的时候,顺手写的。代码比较丑……1、直接插入排序 2、希尔排序 3、简单选择排序 4、堆排序

网友评论

      本文标题:Java简单排序之选择排序

      本文链接:https://www.haomeiwen.com/subject/ifvnmhtx.html