十大排序算法之->选择排序

本文介绍了选择排序的基本思想、步骤、时间复杂度(O(N^2))、空间复杂度(O(1)),并给出了Python代码示例。同时提到了动画演示可能用于教学辅助理解。
摘要由CSDN通过智能技术生成

一、选择排序

选择排序是一种简单的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序算法的运作如下:

1、从原始数组的开始位置,寻找最小的元素。

2、将找到的最小元素与数组的第一个元素交换位置。

3、接着,在剩余未排序的元素中继续寻找最小的元素。

4、重复步骤2和步骤3,直到所有元素均排序完毕。

5、经过n-1次迭代后(其中n是数组的长度),数组将被排序完成。

时间复杂度:最坏情况O(N^2),最坏的情况发生在数组完全逆序时,此时选择排序的行为与平均情况类似,需要进行 N*(N-1)/2 次比较

空间复杂度: O(1),选择排序是原地排序算法,只需要一个的内存空间来存储当前找到的最小值


# -*- coding: utf-8 -*-
"""
======================================
   File Name  :selection_sort.py
   Author     :lanmingyong
   date       :2024/4/18 10:49
   Description:选择排序是一种简单的排序算法,其基本思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
                时间复杂度:最坏情况O(N^2),最坏的情况发生在数组完全逆序时,此时选择排序的行为与平均情况类似,需要进行 N*(N-1)/2 次比较
                空间复杂度: O(1),选择排序是原地排序算法,因为它只需要一个额外的内存空间来存储当前找到的最小值
=======================================
"""


def selection(arr):
    for i in range(len(arr) - 1):
        mix_num = i
        for j in range(i + 1, len(arr)):
            if arr[mix_num] > arr[j]:
                mix_num = j
        arr[i], arr[mix_num] = arr[mix_num], arr[i]
        print(arr)


arr = [9, 6, 7, 2, 8, 1, 0, 4]
selection(arr)

# 执行输出
[0, 6, 7, 2, 8, 1, 9, 4]
[0, 1, 7, 2, 8, 6, 9, 4]
[0, 1, 2, 7, 8, 6, 9, 4]
[0, 1, 2, 4, 8, 6, 9, 7]
[0, 1, 2, 4, 6, 8, 9, 7]
[0, 1, 2, 4, 6, 7, 9, 8]
[0, 1, 2, 4, 6, 7, 8, 9]

二、动画演示

  • 3
    点赞
  • 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、付费专栏及课程。

余额充值