排序算法->选择排序

 选择排序是一种容易理解并且相对较为简单的排序方式,他有两个特点:
 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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问。很抱歉我无法上传截图,但我可以为您解答这个问题。 这是一个经典的磁盘调度算法问题,需要根据不同的磁盘调度算法来求出磁头移动轨迹。给定的磁盘请求队列是: 107,183,48,130,18,127,33,66,77,193 磁头当前位置为65,沿磁道号增加的方向移动。下面分别介绍SSTF、LOOK和C-LOOK算法的求解过程。 SSTF算法(最短寻道时间优先) SSTF算法是一种贪心算法,每次选择离当前磁头位置最近的磁道进行访问。具体求解过程如下: 1. 当前磁头位置为65,离它最近的磁道是66,移动1个磁道到66。 2. 磁盘请求队列还有以下磁道:107,183,48,130,18,127,33,77,193。 3. 离当前位置最近的磁道是77,移动9个磁道到77。 4. 磁盘请求队列还有以下磁道:107,183,48,130,18,127,33,193。 5. 离当前位置最近的磁道是48,移动29个磁道到48。 6. 磁盘请求队列还有以下磁道:107,183,130,18,127,33,193。 7. 离当前位置最近的磁道是33,移动15个磁道到33。 8. 磁盘请求队列还有以下磁道:107,183,130,18,127,193。 9. 离当前位置最近的磁道是18,移动15个磁道到18。 10. 磁盘请求队列还有以下磁道:107,183,130,127,193。 11. 离当前位置最近的磁道是27,移动9个磁道到127。 12. 磁盘请求队列还有以下磁道:107,183,130,193。 13. 离当前位置最近的磁道是130,移动3个磁道到130。 14. 磁盘请求队列还有以下磁道:107,183,193。 15. 离当前位置最近的磁道是107,移动23个磁道到107。 16. 磁盘请求队列还有以下磁道:183,193。 17. 离当前位置最近的磁道是183,移动76个磁道到183。 18. 磁盘请求队列还有以下磁道:193。 19. 离当前位置最近的磁道是193,移动10个磁道到193。 20. 磁盘请求队列的所有磁道都已经被访问,SSTF算法的磁头移动轨迹为: 65->66->77->48->33->18->127->130->107->183->193 LOOK算法 LOOK算法是一种基于电梯调度算法的改进算法,它只在磁盘请求队列的两端来回移动,不再像电梯算法那样到达一端就立即掉头。具体求解过程如下: 1. 当前磁头位置为65,磁盘请求队列的最大磁道为193,最小磁道为18,因此磁头移动方向是向磁道号增加的方向。 2. 磁盘请求队列的磁道按照磁头当前移动方向排序为:77,107,127,130,183,193。 3. 离当前位置最近的磁道是77,移动12个磁道到77。 4. 磁盘请求队列的磁道按照磁头当前移动方向排序为:107,127,130,183,193。 5. 离当前位置最近的磁道是127,移动50个磁道到127。 6. 磁盘请求队列的磁道按照磁头当前移动方向排序为:107,130,183,193。 7. 离当前位置最近的磁道是130,移动3个磁道到130。 8. 磁盘请求队列的磁道按照磁头当前移动方向排序为:107,183,193。 9. 离当前位置最近的磁道是183,移动53个磁道到183。 10. 磁盘请求队列的磁道按照磁头当前移动方向排序为:107,193。 11. 离当前位置最近的磁道是193,移动10个磁道到193。 12. 磁盘请求队列的磁道已经全部被访问,LOOK算法的磁头移动轨迹为: 65->77->127->130->183->193->107->48->33->18 C-LOOK算法 C-LOOK算法是LOOK算法的一种变体,它只在磁盘请求队列的两端来回移动,不考虑磁头当前的位置。具体求解过程如下: 1. 当前磁头位置为65,磁盘请求队列的最大磁道为193,最小磁道为18,因此磁头移动方向是向磁道号增加的方向。 2. 磁盘请求队列的磁道按照磁头当前移动方向排序为:77,107,127,130,183,193。 3. 离当前位置最近的磁道是77,移动12个磁道到77。 4. 磁盘请求队列的磁道按照磁头当前移动方向排序为:107,127,130,183,193。 5. 离当前位置最近的磁道是107,移动30个磁道到107。 6. 磁盘请求队列的磁道按照磁头当前移动方向排序为:127,130,183,193。 7. 离当前位置最近的磁道是127,移动20个磁道到127。 8. 磁盘请求队列的磁道按照磁头当前移动方向排序为:130,183,193。 9. 离当前位置最近的磁道是130,移动3个磁道到130。 10. 磁盘请求队列的磁道按照磁头当前移动方向排序为:183,193。 11. 离当前位置最近的磁道是183,移动53个磁道到183。 12. 磁盘请求队列的磁道按照磁头当前移动方向排序为:193。 13. 离当前位置最近的磁道是193,移动10个磁道到193。 14. 磁盘请求队列的磁道已经全部被访问,C-LOOK算法的磁头移动轨迹为: 65->77->107->127->130->183->193->18->33->48 综上所述,根据给定的磁盘请求队列和磁头当前位置,SSTF算法的磁头移动轨迹为: 65->66->77->48->33->18->127->130->107->183->193 LOOK算法的磁头移动轨迹为: 65->77->127->130->183->193->107->48->33->18 C-LOOK算法的磁头移动轨迹为: 65->77->107->127->130->183->193->18->33->48

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值