美文网首页
算法(一):选择排序

算法(一):选择排序

作者: 不知道火舞 | 来源:发表于2019-09-29 14:55 被阅读0次

一、数组和链表

1.数组:

  • 一个数组中的所有元素在内存中必须是相连的
  • 同一个数组中的所有元素类型必须相同(int、double等)
优点

需要随机读取元素时,效率很高

缺点

在数组中插入元素比较慢,需要把后面的元素都后移,如果空间不够,就必须转移到内存的其他地方。

2. 链表

  • 链表中的元素可以放在内存的任意位置
  • 链表中前一个元素存放着下一个元素的地址
优点

a. 快速插入元素,只需要改变前一个元素指向的地址
b. 删除元素只需要改变前一个元素指向的地址

缺点

当要读取链表的最后一个元素时,你必须从头开始读取。因为不知道最后一个元素的位置,所以必须先访问元素#1,从而获取第二个元素的地址,以此类推,最后找到最后一个元素的地址,所以读取速度很慢。

总结

链表在随机插入元素和删除元素的速度上要快于数组,但读取元素数组更快。

二、选择排序

选择排序就是遍历一个列表,找到其中最大或最小的一个元素添加到一个新的列表中,再遍历列表剩余元素,找到最小的元素添加到新列表,直到把所有元素都添加到新列表中。

def find_smallest(arry):
    length = len(arry)
    # 存储最小的值
    smallest = arry[0]
    # 存储最小元素的索引
    smallest_index = 0
    for i in range(1, length):
        if smallest > arry[i]:
            smallest = arry[i]
            smallest_index = i
    return smallest_index


def select_sort(arry):
    new_list = []
    for i in range(len(arry)):
        print(len(arry), i)
        # 找到最小的元素的索引
        smallest_index = find_smallest(arry)
        # 把这个最小元素添加到新列表中,并在原列表中删除
        new_list.append(arry.pop(smallest_index))
    return new_list

if __name__ == "__main__":
    print(select_sort([4, 3, 2, 1]))

相关文章

网友评论

      本文标题:算法(一):选择排序

      本文链接:https://www.haomeiwen.com/subject/kmbbuctx.html