defMaopao(alist):for i inrange(len(alist)-1):min= i
for j inrange(i +1,len(alist)):if alist[min]> alist[j]:min= j
ifmin!= i:
alist[min], alist[i]= alist[i], alist[min]print(alist)
Maopao([3,5,2,8,1,9,4,7])
二分法查找 有序列表查找
deffunc(list1, item):
first =0
end =len(list1)-1while first <= end:
mid =(first + end)//2if item == list1[mid]:returnTrueelif item > list1[mid]:
first = mid +1else:
end = mid -1returnFalseprint(func([i for i inrange(1,101)],1))
defFeibo(n):
a, b, index =1,1,0while index < n:
num = a
a, b = b, a + b
index +=1yield num
f = Feibo(5)print(list(f))
用生成器实现n以内的素数
deffun(n):for i inrange(1, n):
list2 =[]for j inrange(1, i +1):if i % j ==0:
list2.append(j)iflen(list2)==2:yield i
print(list(fun(n=int(input('请输入个数:')))))
单链表的增删改查
#定义一个结点classLinkNode(object):def__init__(self, val):
self.val = val
self._next =None# 链表的相关操作classLink(object):def__init__(self):
self._head =Nonedefis_empty(self):return self._head ==None# 头部增加一个节点defadd(self, val):
node = LinkNode(val)
node._next = self._head
self._head = node
# 尾部添加一个结点defappend(self, val):
node = LinkNode(val)if self._head ==None:
self._head = node
else:
cur = self._head
while cur._next !=None:
cur = cur._next
cur._next = node
# 求出连表长度deflength(self)->int:if self._head ==None:return0
cur = self._head
len=0while cur._next !=None:len+=1
cur = cur._next
returnlen+1# 指定位置添加结点definsert(self, pos, val):if pos <0:returnFalseif pos > self.length():returnFalse
cur = self._head
pre =None
i =0# 位置
node = LinkNode(val)while cur !=None:if i == pos:
pre._next = node
node._next = cur
returnTrue
i +=1
pre = cur
cur = cur._next
# 删除所有指定值得结点defdel_val(self, val):
cur = self._head
pre =None# cur的前驱节点while cur !=None:if cur.val == val:if pre ==None:
self._head =Noneelse:
pre._next = cur._next
cur = pre._next
else:
pre = cur
cur = cur._next
defprintf(self):
cur = self._head
while cur !=None:print("{}".format(cur.val))
cur = cur._next
# print("{}".format(cur.val)) #尾节点不在循环里,单独打印print("len={}\n".format(self.length()))if __name__ =="__main__":
link = Link()
link.add(1)
link.add(2)
link.append(3)
link.append(4)
link.append(5)
link.append(3)
link.insert(3,6)
link.del_val(3)print(link.is_empty())
link.printf()
快排
list_before =[2,4,9,3,4,5,2,1,5,6,4,2,7,8,6,0]defquickSort(list_before):iflen(list_before)<2:return list_before
left_part =[left_ele for left_ele in list_before[1:]if left_ele < list_before[0]]
right_part =[right_ele for right_ele in list_before[1:]if right_ele > list_before[0]]
equal_part =[equal_ele for equal_ele in list_before[0:]if equal_ele == list_before[0]]return quickSort(left_part)+ equal_part + quickSort(right_part)
list_after = quickSort(list_before)print(list_after)