算法之选择排序

1、数组与链表

数组是连续地存储在内存空间中,数组的第一个元素所在的位置是从0开始的,通常称为第一个元素的索引位置为0。当我们知道一个数据的长度(通过len()方法去测量),就可以根据索引取出这个数据里面的数据。
在这里插入图片描述
链表是不连续的存储在内存空间。链表中的第一个元素中存储着下一元素的地址信息,若要在链表中查询某个数据,则需要从头到尾依次进行查询。
在这里插入图片描述

* 两者的区别:

A、随机查询:
数组:由于数据是连续存储的,所以能够很容易地根据它的索引查找到对应的数值————O(1);
链表:跳跃性查收数据时,需要全表依次从头开始查找————O(n);
B、插入、删除数据:
数组:除尾部插入数据外,在指定位置上插入或者删除数据后,该位置后面地数据都需要向后或者向前进行移动,若插入数据时,内存空间下一位置已被占用,则需要将数组中共所有数据拷贝到其他位置————O(n);
在这里插入图片描述
链表:在指定位置插入或者删除数据,只需要变动该位置前面节点中下一节点地存储地址————O(1);
在这里插入图片描述

2、代码实现

class Sortlist(object):
    """
    将无序列表变为有序列表,升序
    """
    def __init__(self, list):
        self.list = list
        self.result = []
        self.min_num = list[0]
        self.min_index = 0

    def find_min_num(self):
        for i in range(1, len(self.list)):
            if self.list[i] < self.min_num:
                self.min_num = self.list[i]
                self.min_index = i
        return self.min_index

    def add_to_list(self,num):
        self.result.append(num)
        self.list.remove(num)

    def back_zero(self):
        self.min_index = 0
        self.min_num = self.list[0]

    def main(self):
        while len(self.list) > 0:
            if len(self.list) > 1:
                num = self.find_min_num()
                self.add_to_list(self.list[num])
                self.back_zero()
            else:
                self.add_to_list(self.list[0])
        return self.result


list = [17, 5, 8, 53, 87, 12, 19, 99, 23]
sort_li = Sortlist(list)
print(sort_li.main())

结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值