#先看下sort 和 remove 用法
list=[1,9,7,8,5,6,3,2,2,0,4]
list.sort()
a=list[7]
list.remove(a)
print(list)
[0, 1, 2, 2, 3, 4, 5, 7, 8, 9]
#选择排序
list1=[9,7,8,5,6,3,4]
arr=[]
while list1:
res=float("inf")
for i in range(len(list1)):
if list1[i]< res:
res=list1[i]
arr.append(res)
list1.remove(res)
print(arr)
[3, 4, 5, 6, 7, 8, 9]`
#或者这样写也行 选择排序
list1=[9,7,8,5,6,3,4]
arr=[]
while list1:
arr.append(min(i for i in list1))
list1.remove(min(i for i in list1))
print(arr)
[3, 4, 5, 6, 7, 8, 9]
#想节省空间的话,就不开新栈,直接找到最小值交换位置
list1=[9,7,8,5,6,3,4]
for j in range(len(list1)):
res=float("inf")
for i in range(j,len(list1)):
if list1[i]< res:
res=list1[i]
index=i
p=list1[j]
list1[j]=res
list1[index]=p
print(list1)
[3, 4, 5, 6, 7, 8, 9]
#想节省空间的话,就不开新栈,直接找到最小值交换位置
list1=[9,7,8,5,6,3,4]
for j in range(len(list1)):
res=float("inf")
for i in range(j,len(list1)):
if list1[i]< res:
res=list1[i]
index=i
p=list1[j]
list1[j]=res
list1[index]=p
print(list1)
[3, 4, 5, 6, 7, 8, 9]
#快速排序(递归)
def qsort(arr):
if len(arr)< 2: #基线条件
return arr
else : #递归条件
p=arr[0]
small=[i for i in arr[1:] if i<p]
big=[i for i in arr[1:] if i>=p]
return qsort(small)+[p]+qsort(big)
print(qsort([9,7,8,5,6,3,4]))
[3, 4, 5, 6, 7, 8, 9]
上个快速排序算法的核心思想是分而治之(D&C) 以下为一些D&C的应用
#求和
def sumi(arr):
if arr==[]:
return 0
else:
return arr[0]+sumi(arr[1:])
list1=[9,7,8,5,6,3,4]
print(sumi(list1))
42
#求最大值
def maxi(arr):
if arr==[]:
return None
if len(arr)==1:
return arr[0]
if len(arr)==2:
return arr[0] if arr[0]> arr[1] else arr[1]
else:
return arr[0] if arr[0]> maxi(arr[1:]) else maxi(arr[1:])
print(maxi([9,7,8,5,6,3,4]))
9