测开之路二十四:常见的排序
冒泡排序
算法简介:
1.比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
2.每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为做大或最小的数.
3.针对除了最后一个元素重复进行上面的步骤。
4.重复1-3步骤直到完成排序
data = [1,4,3,5,96,0,5,3,864,7]
for i in range(0,len(data)-1): # i控制需要多少次遍历
for j in range(0,len(data)-1-i): # j控制前后两个比较的变量
if data[j] > data[j+1]:
data[j],data[j+1] = data[j+1],data[j]
# print(data)
print(data)
选择排序
从第一个到最后一个数一次比较,当前数与后面的所有数比较,最小的放在当前位置。选出最小/最大的数,排在当前位置
def selection(data):
for i in range(len(data) - 1):
for j in range(i + 1, len(data)):
if data[i] > data[j]:
data[i], data[j] = data[j], data[i]
return data
插入排序
从第二个开始依次取数,和已排好的数据比较,在已排好的数据里找个位置插入。
def insertion(data):
# i代表待排序的数的索引
for i in range(1, len(data)):
# j代表已排好的所有数的索引
for j in range(0, i):
if data[i] < data[j]:
data.insert(j, data.pop(i))
# print(data)
return data
快排
快排是将数据大小分组,递归处理分组数据进行排序。
def quick(data):
#print(data)
small, middle, big = [], [], []
if len(data) <= 1:
return data
pivot = data[0]
for i in data:
if i < pivot:
small.append(i)
elif i > pivot:
big.append(i)
else:
middle.append(i)
less = quick(small)
more = quick(big)
return less + middle + more
归并排序
def merge(a, b):
c = []
h = j = 0
while j < len(a) and h < len(b):
if a[j] < b[h]:
c.append(a[j])
j += 1
else:
c.append(b[h])
h += 1
if j == len(a):
for i in b[h:]:
c.append(i)
else:
for i in a[j:]:
c.append(i)
return c
def merge_sort(lists):
if len(lists) <= 1:
return lists
middle = len(lists)//2
left = merge_sort(lists[:middle])
right = merge_sort(lists[middle:])
return merge(left, right)
讨论群:249728408