"""冒泡排序""" def Bubble_sort(li): for j in range(len(li)-1, 0, -1): for i in range(j): if li[i] > li[j]: li[i], li[j] = li[j], li[i] print(li) if __name__ == '__main__': li = [54, 26, 93, 17, 77, 31, 44, 55, 20] # Bubble_sort(li) """选择排序""" def select_sort(t): for i in range(len(t)): min_index = i for j in range(i+1,len(t)): if t[j] < alist[min_index]: min_index = j if min_index != i: t[i], t[min_index] = t[min_index], t[i] print(t) if __name__ == '__main__': alist = [54, 226, 93, 17, 77, 31, 44, 55, 20] select_sort(alist) """插入排序 就是将数据比较出来的重新插入""" import time def insert_sort(t): """从第二个数开始,和第一个比较""" for i in range(1, len(t)): for j in range(i, 0, -1): if t[j] < t[j-1]: t[j-1], t[j] = t[j], t[j-1] print(t) if __name__ == '__main__': alist = [54, 26, 93, 17, 77, 31, 44, 55, 20] insert_sort(alist) def Qucik_sort(t,start,end): low = start high = end mid = t[start] """指定停止条件""" if low >= high: return """第一个位置已经空出来了,所以可以存放数据""" while low < high: """这个是将比mid大的值放在左边""" while low < high and t[high] > mid: """此时应该将最后一个位置的游标向前移一个位置""" high -= 1 t[low] = t[high] """这个是将比mid小的值放在右边,已经空出来的位置""" while low < high and t[low] <= mid: low += 1 t[high] = t[low] """如果重合了,就将mid的值赋值给t[low]""" t[low] = mid """此时如果按照mid已经分为了两个部分,开始递归""" Qucik_sort(t, start, low-1) Qucik_sort(t, low+1, end) if __name__ == '__main__': alist = [54, 26, 93, 17, 77, 31, 44, 55, 20] Qucik_sort(alist, 0, len(alist)-1) print(alist) """希尔排序""" def shell_sort(t): """获取长度 分组""" n = len(t) gap = n // 2 while gap > 0: for i in range(gap, n): j = i while j >= gap and t[j] < t[j-gap]: t[j-gap], t[j] = t[j], t[j-gap] j -= gap """得到新的步长""" gap = gap // 2 if __name__ == '__main__': a_list = [54, 26, 93, 17, 77, 31, 44, 55, 20] shell_sort(a_list) print(a_list) """归并排序""" def merge(left, right): """设定下标, l,r""" l = 0 r = 0 result = [] while l < len(left) and r < len(right): if left[l] > right[r]: result.append(right[r]) r += 1 else: result.append(left[l]) l += 1 """如果,还有剩下的,就要将剩下的直接放进result中""" result += left[l:] result += right[r:] return result def merge_sort(t): if len(t) <= 1: return t """分组""" num = len(t)//2 left = merge_sort(t[:num]) right = merge_sort(t[num:]) return merge(left, right) if __name__ == '__main__': alist = [54, 26, 93, 17, 77, 31, 44, 55, 20] sorted_alist = merge_sort(alist) print(sorted_alist) """二分查找""" def binary_search(item,alist): if len(alist) ==0: return False mid_point = len(alist)//2 if alist[mid_point] == item: return True if alist[mid_point] >item: return binary_search(item,alist[:mid_point]) else: return binary_search(item,alist[mid_point+1:]) if __name__ == '__main__': testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42] print(binary_search(13,testlist))