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())
结果: