美文网首页
java算法:选择排序

java算法:选择排序

作者: Bfmall | 来源:发表于2023-03-27 10:47 被阅读0次

选择排序也是一种简单直观的排序算法,实现原理比较直观易懂:
首先在未排序数列中找到最小元素,然后将其与数列的首部元素进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换。以此类推,直至所有元素圴排序完毕.

同理,可以类比与打扑克和打麻将, 和上面插入排序不同, 插入排序相当于抽一张牌整理好了再抽一张, 而选择排序相当于一次性给你一副乱牌, 然后慢慢整理的感觉.
这也容易理解为什么选择排序为啥比插入排序慢了. 插入排序是摸一张牌, 然后直接插入到手中已经排好序的牌,再摸下一张牌.
选择排序相当于在一堆牌中, 不断的找到最小的牌往前面放.
image.png

代码实现:

/**
     * 选择排序
     */
    public void selectSort01() {
        int[] arr = {4,1,3,6,2,5};
        /**
         * 每轮找到最小值: 找到最小值([]中为最小值)    交换    分割线左边代表已经排序好的数组,右边代表未排序的数组
         * 第一轮:       {4,[1],3,6,2,5}             ->    {[1],4,3,6,2,5} (将[1]和4交换位置)
         * 第二轮;       {1, --分割线-- 4,3,6,[2],5}  ->   {1,[2], --分割线-- 3,6,4,5} (将[2]和4交换位置)
         * 第三轮:       {1,2, --分割线-- [3],6,4,5}  ->   {1,2,[3], --分割线-- 6,4,5} ([3]和min相等,无需交换位置)
         * 第四轮:       {1,2,3, --分割线-- 6,[4],5}  ->   {1,2,3,[4], --分割线-- 6,5} (将[4]和6交换位置)
         * 第五轮:       {1,2,3,4, --分割线-- 6,[5]}  ->   {1,2,3,4,[5], --分割线-- 6} (将[5]和6交换位置)
         * 第六轮:       {1,2,3,4,5, --分割线-- [6]}  ->   {1,2,3,4,5,6} (就剩6一个元素,无需交换)
         * 得到结果:{1,2,3,4,5,6}
         */
        for (int i=0;i<arr.length;i++) {//比较几轮
            int min = i;//初始化最小值min(索引index)为每轮未排序数组的第一个元素位置

            //第二层for循环目的是从未排序的数组中找出最小的值(用来和未排序数组中第一个元素进行比较)
            for (int j = i+1;j< arr.length;j++) {
                if (arr[j] < arr[min]) {
                    //将最小值的index复制给min,一轮循环之后,就得到了数组中最小值的index
                    min = j;
                }
            }

            //每轮找到的最小值min和未排序数组的第一个元素比较
            if (min != i) {
                //如果最小值min和未排序数组的第一个元素index不同,则替换位置
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
            Log.i(TAG, "第"+(i+1)+"轮,i="+i+", min="+min+", arr="+Arrays.toString(arr));
        }
        Log.i(TAG, "选择排序结果:arr="+Arrays.toString(arr));
    }

运行结果:

第1轮,i=0, min=1, arr=[1, 4, 3, 6, 2, 5]
第2轮,i=1, min=4, arr=[1, 2, 3, 6, 4, 5]
第3轮,i=2, min=2, arr=[1, 2, 3, 6, 4, 5]
第4轮,i=3, min=4, arr=[1, 2, 3, 4, 6, 5]
第5轮,i=4, min=5, arr=[1, 2, 3, 4, 5, 6]
第6轮,i=5, min=5, arr=[1, 2, 3, 4, 5, 6]
选择排序结果:arr=[1, 2, 3, 4, 5, 6]

————————————————
版权声明:本文为CSDN博主「zzzgd816」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzzgd_666/article/details/87634775

相关文章

  • java 实现排序算法之「选择排序」

    java 实现排序算法系列 继冒泡排序算法之后,选择排序终于和大家见面了。为什么冒泡排序之后要说选择排序呢,是因为...

  • 【算法】排序(一)选择排序

    在排序算法中,最简单的莫过于选择排序了。 本文将介绍以下内容 排序思路算法实现(JAVA)测试阶段算法分析 排序思...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • Java版排序算法

    网上很多Java排序算法有错误,以下是本人经过整理校验后的算法。 1、冒泡排序 2、快速排序 3、选择排序 4、堆...

  • 排序算法

    常见排序算法及JAVA实现 简单选择排序(SelectSort) 选择排序思想很简单,对所有元素进行遍历,选出最小...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

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

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

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

  • JAVA排序算法总结

    通过对排序算法的总结,更深一步去了解JAVA。 1.时间复杂度为O(n*n)的排序算法 冒泡排序 选择排序 插入排...

  • 十大经典排序算法(java实现)

    前言 本文我们将以java代码实现十大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序...

网友评论

      本文标题:java算法:选择排序

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