选择排序:Python实现(低级排序法)

选择排序:Python实现(低级排序法)

维基百科:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
复杂度分析:
选择排序的交换操作介于 0和 (n-1)次之间。选择排序的比较操作为 n(n-1)/2次。选择排序的赋值操作介于 0和 3(n-1)次之间。比较次数 O(n^2),比较次数与关键字的初始状态无关,总的比较次数 N=(n-1)+(n-2)+…+1=n\times (n-1)/2。交换次数 O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换 n-1次。交换次数比冒泡排序较少,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。总之,选择排序是一种低级的排序方式
不啰嗦了,上代码

1.新创列表的形式

def select_sort(li):
    new_li = []
    for i in range(len(li)):
        min_value = min(li)#调用min()找出最小值
        new_li.append(min_value)
        li.remove(min_value)
    return new_li
  li = []
while 1:#收集用户需要排序的数据
    a = input('请输入您要查询的数字,回车输入选一个数据,#结束:')
    if a=='#':
        break
    a = int(a)
    li.append(a)
print(f'您要排序的列表是{li}')
new_li = select_sort(li)
print(f'选择排序完成后的列表是{new_li}')

第一,这种方式新开辟了一个列表,考虑内存问题,
第二,调用了min()和remove(),他们的效率其实很低的(也是通过遍历什么的)
2.无需新开创列表

def select_sort(li):
    for i in range(len(li)-1):#外层循环比较的趟数
        min_index = i#先假设最小值的索引是i
        for j in range(i,len(li)-1):#每走一趟有序区增加一个,无序区减少一个
            if li[j]<li[min_index]:
                li[j],li[min_index] = li[min_index],li[j]
    return li
def scan(a,b = "int",c = "请输入一个值"):
    d = []
    f = 1
    while True:
        g = input(c+":")
        if b == "int":         #当b="int"时,转化为整数数值赋给列表
            d.append(int(g))
        elif b == "float":       #当b="float"时,转化为浮点数赋给列表
            d.append(float(g))
        elif b == "str":       #把字符串值赋给列表
            d.append(g)
        if f >= a:
            break
        f += 1
    return d
a = int(input('输入您要排序的数据个数:'))
b = input('请输入您要排序数据的类型(e.g.int,float,str)')
li = scan(a,b)
li = select_sort(li)
print(f"排完序:{li}")


原地操作几乎是选择排序的唯一优点,当空间复杂度要求较高时,可以考虑选择排序;实际适用的场合非常罕见

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页