【浅学选择排序】

本文详细介绍了选择排序算法的原理与步骤,通过实例解析了每一轮如何找到最小值并与其所在位置交换,最终达到排序的目的。提供了一段Java代码实现选择排序,并建议读者通过手动模拟加深理解。推荐使用VisuAlgo等工具辅助学习。
摘要由CSDN通过智能技术生成

1.时间:2022.03.07

2.目的:作业,学习

3.概念:重复(元素个数-1)次

  1.把第一个没有排序过的元素设置为最小值

  2.遍历每个没有排序过的元素

  3.如果元素 < 现在的最小值

  4.将此元素设置成为新的最小值

  5.将最小值和第一个没有排序过的位置交换

4.图解概念:

图片来自于:CSDN-----Joy CR的创作。
在这里插入图片描述
在这里插入图片描述

5.文字思路:

总目标:每一次找到一个最小值与数组索引的第1(index)个位置交换位置(放到排序的起始位置。)

举例数组:int[ ] array = { 5,4,7,2,6}

基础知识:array[0] = 5,array[1] = 4,array[2] = 7,array[3] = 2,array[4] = 6.

第一轮:令array[index] = 5;即index = 0;遍历寻找数组中最小的数,可得当index= 3时,最小值为2。因为2 < 5,所以交换5和2的位置,第一轮排序结束,得到新的排序数组为:{2,4,7,5,6}

第二轮:因为index= 0的位置上的数组已经满足条件,所以我们设index= 1;找到数组中除了array[0] = 2的数中最小的数,可得当array[1] = 4时,即index= 1时最小,又因为4在index= 1的位置上,所以无需交换位置。第二轮循环结束,得到的新排序数组为:{2,4,7,5,6}

第三轮:因为index = 0;index= 1位置上的数组的数已经满足条件,所以我们设index= 2;找到除了array[0] = 2,array[1] = 4以外的数组中的最小值,可得当index= 3时最小。因为5 < 7,所以交换7和5的位置,第三轮结束,得到新的排序数组为:{2,4,5,7,6}

第四轮:因为index= 0 ,1,2位置上的数都满足条件,所以我们设index= 3;找到除了array[0] = 2,array[1] = 4,array[2] = 5以外的数组中的最小值,可得当index= 4时最小。因为6 < 7,所以交换7和6的位置,第四轮结束, 得到新的排序数组为:{2,4,5,6,7}

       数组已经全部有序,排序结束!!!

6.代码:

public class slectSort {
    public static void main(String[] args) {
        int[] array = {3, 7, 2, 9, 6, 4};
        for (int i = 0; i < array.length - 1; i++) {
            int index = i;//索引
            for (int j = i + 1; j < array.length; j++) {
                if (array[index] > array[j]) {//找到最小值的索引
                    index = j;
                }
            }
            //交换,如果数组中的最小数不是第一位,交换
            if (index != i) {
                int temp;
                temp = array[index];
                array[index] = array[i];
                array[i] = temp;
            }
        }
        //遍历
        for (int k = 0; k < array.length; k++) {
            System.out.print(array[k] + "  ");
        }
    }
}

     1.理解思路:在每一轮里找到最小值 ,并且与第一个值交换位置(如果第一值不是最小的情况),因此我们需要借助数组下标来找到所需的值并且进行交换。所以我们要先设一个值的数组下标index(第一个进行比较的值),而且这个index还需要一直递增,往后遍历所以我们要第一个for循环来控制index。然后我们需要进行我们的第二步:进行比较,并且找到最小值(j是从i+开始的是因为不需要和第一个数即和本身自己比)。这里我们的找和比较步骤已经完成,所以我们要开始进行交换所以使用一个if语句判断这个最小值是不是我的设置的第一个比较的值(即第一轮中的index= 0),然后进行数值交换。最后在for循环外遍历排序后的数组,进行打印。

7.结尾:

感觉还是自己手动算一遍 ,一遍遍理每一个数的交换和每一轮的排序结果,就会很容易理解这个算法思想,给大家安利个好用的网站有利于理解:VisuAlgo

附手动模拟:

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值