排序算法->选择排序

 选择排序是一种容易理解并且相对较为简单的排序方式,他有两个特点:
 1.运行时间与输入无关:你会发现如果这个数组中数据全部相等和
 元素随机排列的相同长度数组他们的排序时间是一样长的,具体原因是由于其排序思想有关,
 在下文会讲解。
 2.数据移动最少:每次交换都会改变两个数组元素的值,所以交换次数与数组的大小是线性关系
 相对于其他排序算法都不具备这一个特性。

 排序思路:
 首先确定最小的元素值放置于数组的那个索引位置,在选择排序中我们通常从数组的第一位开始
 进行元素交换。然后开始寻找未排序元素中的最小元素值,寻找完成后,与交换索引位进行数
 据交换。如此往复,直到整个数组排序完成,由于在整个排序过程中都是在选择未排序元素中的
 最小值,所以我们叫这个算法为选择排序

 数据解析:
 待排序数组值:2 5 1 3(初始排序顺序)
 第一轮排序后:1 5 2 3 (此时未排序元素为4个,找到最小值,与第一位索引处值进行数据
 交换 )
 第二轮排序后:1 2 5 3 (此时未排序元素为3个,找到最小值,与第二位索引处值进行数据
 交换)
 第三轮排序后:1 2 3 5 (此时未排序元素为2个,找到最小值,与第三位索引处值进行数据
 交换,此时待交换索引增加至第四位,后续无可交换数据,排序结束)



参考算法
 public static int[] sort(int[] result)
    {
        //外层循环控制当前最小值插入索引位
        for(int i=0;i<result.length;i++)
        {
            int minIdenx=i;//最小值索引位->默认赋值给最小值插入索引位
            //从插入索引位后一位开始比较最小值
            for(int j=i+1;j<result.length;j++)
            {
                //如果当前检索的索引位值小与最小值索引位则进行替换
                if(result[j]<result[minIdenx]) minIdenx=j;
            }
            //二层循环完成后,minIdenx处值应为最小值索引与当前外层循环索引
            //进行交换
            int temp=result[minIdenx];
            result[minIdenx]= result[i];
            result[i]=temp;
        }


        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值