选择排序python

目录

1、选择排序

2、代码实现

3、时间复杂度和空间复杂度


1、选择排序

选择排序一般的应用场景就是将列表中的元素从大到小排列(或者从小到大排列)。一般实现的步骤就是遍历一个列表,每次找出列表中最大(或者最小)的元素,并将该元素添加到一个新的列表中。

2、代码实现

从选择排序的一般步骤中我们可以将代码分成两个步骤,首先编写一个找出数组中最大(或者最小)元素的函数,接着将找出最大(最小)元素放入新列表中,完成选择排序。

下面的代码以找出列表中最小的元素为例:

def findSmallest(arr):
    smallest = arr[0]
    smallest_id = 0
    for i in range(1,len(arr)):
        if arr[i]<smallest:
            smallest = arr[i]
            smallest_id = i
    return smallest_id

def Selection_sort(arr):
    newarr = []
    for i in range(len(arr)):
        print(f"第{i}轮遍历")
        smallest_id = findSmallest(arr)
        print(f"此轮最小的数为:{arr[smallest_id]}")
        newarr.append(arr.pop(smallest_id))
        print(f"此轮结束后arr:{arr}")
        print(f"此轮结束后newarr:{newarr}")
        print("\n")
    return newarr

arr = [1,6,3,9,0,4]
newArr = Selection_sort(arr)
print(newArr)

运行后的结果为:

第0轮遍历
此轮最小的数为:0
此轮结束后arr:[1, 6, 3, 9, 4]
此轮结束后newarr:[0]


第1轮遍历
此轮最小的数为:1
此轮结束后arr:[6, 3, 9, 4]
此轮结束后newarr:[0, 1]


第2轮遍历
此轮最小的数为:3
此轮结束后arr:[6, 9, 4]
此轮结束后newarr:[0, 1, 3]


第3轮遍历
此轮最小的数为:4
此轮结束后arr:[6, 9]
此轮结束后newarr:[0, 1, 3, 4]


第4轮遍历
此轮最小的数为:6
此轮结束后arr:[9]
此轮结束后newarr:[0, 1, 3, 4, 6]


第5轮遍历
此轮最小的数为:9
此轮结束后arr:[]
此轮结束后newarr:[0, 1, 3, 4, 6, 9]


[0, 1, 3, 4, 6, 9]

从上面运行后的结果可见:

选择排序在每轮中,选出arr中最小的元素,将其从arr中pop出来, 并将该元素放入newarr中,直到arr为空。排序后的结果就是newarr。

3、时间复杂度和空间复杂度


空间复杂度:只需要常数个辅助单元,所以空间复杂度为O(1)

时间复杂度:我们看到选择排序同样是双层循环n*(n-1)),所以时间复杂度也为:O(n^2)

稳定性:因为存在任意位置的两个元素交换,比如[5, 8, 5, 2],第一个5会和2交换位置,所以改变了两个5原来的相对顺序,所以为不稳定排序。

是否为原地排序: 是原地排序
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值