冒泡排序
arr = [4, 3, 2, 5, 1, 8, 6, 7]
a = 0
while a < len(arr) - a:
for j in range(len(arr)-a-1):
if arr[j] > arr[j + 1]:
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
a = a + 1
print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8]
选择排序
arr = [9, 3, 2, 5, 1, 8, 6, 7, 4, 10]
for i in range(len(arr)-1):
min = i
j = i+1
while j < len(arr):
if arr[j] < arr[min]:
min = j
j = j+1
if min != i:
temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
插入排序
arr = [4, 3, 2, 5, 1, 8, 6, 7]
for i in range(len(arr)-1):
i = i + 1
temp = arr[i]
change = 'false'
j = i - 1
while j >= 0:
if arr[j] > temp:
arr[j+1] = arr[j]
change = 'true'
else:
break
j = j - 1
if change == 'true':
arr[j+1] = temp
print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8]
快速排序
list = [2,1,5,4,8,7,6,3]
def quick_sort(list):
left = []
pivotList = []
right = []
# 递归出口
if len(list) <= 1:
return list
else:
# 将第一个值做为基准
pivot = list[0]
for i in list:
# 将比急转小的值放到left数列
if i < pivot:
left.append(i)
# 将比基准打的值放到right数列
elif i > pivot:
right.append(i)
# 将和基准相同的值保存在基准数列
else:
pivotList.append(i)
# 对less数列和more数列继续进行排序
less = quick_sort(left)
more = quick_sort(right)
return less + pivotList + more
print(quick_sort(list))
输出:[1, 2, 3, 4, 5, 6, 7, 8]
python内置的排序函数
sort 与 sorted
区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sort
arr = [4, 3, 2, 5, 1, 8, 6, 7]
arr.sort()
print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8]
sorted
arr = [4, 3, 2, 5, 1, 8, 6, 7]
print('sorted排序生成新的临时的={}'.format(sorted(arr)))
print('原来的arr不变={}'.format(arr))
输出:
sorted排序生成新的临时的=[1, 2, 3, 4, 5, 6, 7, 8]
原来的arr=[4, 3, 2, 5, 1, 8, 6, 7]
sorted 的应用,也可以通过 key 的值来进行数组/字典的排序,比如:
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
输出结果:
[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]
先按照成绩降序排序,相同成绩的按照名字升序排序:
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
输出结果:
[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]