1.冒泡排序_代码示例
a = [3,5,2,4,7,13,46,54,33,21,4]
def bubble_sort(array): # 冒泡排序。最坏时间复杂度:O(n2)
l = len(array)
temp = None
for x in range(0, l-1):
for y in range(0, l-1-x):
if array[y] > array[y+1]:
temp = array[y]
array[y] = array[y+1]
array[y+1] = temp
bubble_sort(a)
print(a)
2.选择排序_代码示例
a = [21,5,30,9,47,7,65,18]
def select_sort(array): # 选择排序。最坏时间复杂度:O(n2)
l = len(array)
index = None
for x in range(l):
for y in range(x, l):
index = x
if array[x] > array[y]:
index = y
temp = array[x]
array[x] = array[index]
array[index] = temp
select_sort(a)
print(a)
3.插入排序_代码示例
a = [21,5,30,9,47,7,65,18]
def insert_sort(array): # 插入排序
l = len(array)
for x in range(1, l):
temp = array[x]
for y in range(x, 0, -1):
if temp < array[y-1]:
array[y] = array[y-1]
if y-1 == 0: # 这步易漏
array[y-1] = temp
else:
array[y] = temp
break
insert_sort(a)
print(a)
4.快排_代码示例
a = [21,5,30,9,47,7,65,18]
def quick_sort(alist, start, end): # 快排
if start >= end:
return
mid = alist[start]
low = start
high = end
while low < high:
while low < high and alist[high] >= mid:
high -= 1
alist[low] = alist[high]
while low < high and alist[low] < mid:
low += 1
alist[high] = alist[low]
alist[low] = mid
quick_sort(alist, start, low-1) # 递归
quick_sort(alist, low+1, end)
quick_sort(a, 0, len(a)-1)
print(a)
5.希尔排序_代码示例
ef shell_sort(alist): # 希尔排序
n = len(alist)
gap = n // 2
while gap > 0:
for i in range(gap, n): # 按步长进行插入排序
j = i
while j>=gap and alist[j-gap] > alist[j]: # 插入排序
alist[j-gap], alist[j] = alist[j], alist[j-gap]
j -= gap
gap = gap // 2 # 得到新的步长
alist = [54,26,93,17,77,31,44,55,20]
shell_sort(alist)
print(alist)
6.归并排序_代码示例
def merge_sort(alist):
if len(alist) <= 1:
return alist
num = len(alist) // 2
left = merge_sort(alist[:num])
right = merge_sort(alist[num:])
return merge(left,right)
def merge(left, right):
l, r = 0, 0
result = []
while l<len(left) and r<len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += left[l:]
result += right[r:]
return result
alist = [54,26,93,17,77,31,44,55,20]
result = merge_sort(alist)
print(result)
7.二分查找_代码示例
alist = [1,3,5,7,9,12,14,16,17,24,26]
def binary_search(alist, item): # 前提是有序的顺序表 非递归方法
first = 0
last = len(alist)-1
while first <= last:
midpoint = (first+last)//2
if alist[midpoint] == item:
return True
elif item < alist[midpoint]:
last = midpoint - 1
else:
first = midpoint + 1
return False
print(binary_search(alist, 3))
print(binary_search(alist, 13))
def binary_search(alist, item): # 递归方法实现
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return True
else:
if item<alist[midpoint]:
return binary_search(alist[:midpoint],item)
else:
return binary_search(alist[midpoint+1:],item)
print(binary_search(alist, 3))
print(binary_search(alist, 13))
8.排序算法效率总结图