排序数组之选择排序-SelectionSort

        排序是算法中常见的一种操作,而最长见的排序方法有冒泡排序选择排序。冒泡排序方法简单容易理解,今天我们来看一下选择排序的实现

        

//这是我直接从IDEA里面复制出来的,可以直接复制这个方法到类中使用


    public static void selectionSort(double[] list){    //这个方法名为selectionSort---选择排序

        for(int i = 0; i <list.length-1; i++){    //以数组长度作为循环次数,循环

            double cur = list[i];    //创建一个中间值用来存储数值中的值,以免改变数组

            int cur_index = i;    //创建一个与中间值对应的下标来存储数组中元素的下标
------------------------------------------------------------------------------------

            //下面循环了一次数组,找出最小值,和其对应的下标

            for(int j = i+ 1; j <list.length;j++){    //初始位置总是在i+1的地方,是为了避免重复查找。

                if (cur > list[j]){    //如果当前值大于数组中下一个位置的值

                    cur = list[j];    //将下一个位置的值和下标赋值都给cur

                    cur_index = j;

                }

            }
----------------------------------------------------------------------------------

            if(cur_index != i){    //如果当前cur的位置发生了改变(i是cur的上一个位置值,cur_index是当前位置)

                list[cur_index] = list[i];//那么将数组中上一个值赋值给当前值

                list[i] = cur;//将临时值赋值给上一个值

            }
        }
    }
}

看起来挺复杂的样子

同学,现在还不需要全部理解,先将其记住,在使用的过程中慢慢理解,才是循序渐进的方法,首先是拿下它。要的就是耐心和保持信心。

我们试着带入数组将其显示化出来每一个大的循环都做了什么

此时大循环对应的i为0:

初始化一个数组里面包含这些值:

2        9        5        4        8        1        6

第一个小循环里面,找出最小值:1

第二个小循环里面,交换最小值与大循环对应的值:

现在:

1        9        5        4        8        2        6

--------------------------------------------------------------------------------

再重复上面的步骤

此时大循环对应的i=1 :

数组里面包含这些值:

1        9        5        4        8        2        6

第一个小循环里面,找出最小值:2

第二个小循环里面,交换最小值与大循环对应的值:

现在:

1        2        5        4        8        9        6

----------------------------------------------------------------------------------------

再重复上面的步骤

此时大循环对应的i=2 :

数组里面包含这些值:

1        2        5        4        8        9        6

第一个小循环里面,找出最小值:4

第二个小循环里面,交换最小值与大循环对应的值:

现在:

1        2          4        5        8        9        6

----------------------------------------------------------------------------------------

再重复上面的步骤

此时大循环对应的i=3 :

数组里面包含这些值:

1        2          4        5        8        9        6

..........

接下来的几个循环

数组变成了

1        2          4        5        6        9        8

又变成了

1        2          4        5        6        8        9

最后由于数列中只剩最后一个数字,排序结束

上面的循环有一部分被省略掉了,那些重复的循环,如果现在不会,试着多去读一些,渐渐地就会清楚。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值