# -*- coding: utf-8 -*- import random def bubble_sort(sort_list): """冒泡排序""" lens = len(sort_list) for j in range(lens-1): change_times = 0 for i in range(lens-1-j): if sort_list[i] > sort_list[i+1]: sort_list[i], sort_list[i+1] = sort_list[i+1], sort_list[i] change_times += 1 if change_times == 0: return def selection_sort(sort_list): """选择排序""" lens = len(sort_list) for j in range(lens-1): min_num_index = j for i in range(j, lens): if sort_list[min_num_index] > sort_list[i]: min_num_index = i sort_list[j], sort_list[min_num_index] = sort_list[min_num_index], sort_list[j] def insert_sort(sort_list): """插入排序""" lens = len(sort_list) for i in range(lens): while i > 0: if sort_list[i] < sort_list[i-1]: sort_list[i], sort_list[i-1] = sort_list[i-1], sort_list[i] i -= 1 else: break def shell_sort(sort_list): """希尔排序""" lens = len(sort_list) gap = lens // 2 while gap > 0: for i in range(gap, lens): while i > 0: if sort_list[i] < sort_list[i-gap]: sort_list[i], sort_list[i-gap] = sort_list[i-gap], sort_list[i] i -= gap else: break gap //= 2 def quick_sort(sort_list, start, end): """快速排序""" if start >= end: return low = start high = end middle_value = sort_list[start] while low < high: # 第一种判断方式 while low < high and sort_list[high] >= middle_value: high -= 1 sort_list[low] = sort_list[high] while low < high and sort_list[low] < middle_value: low += 1 sort_list[high] = sort_list[low] # # 第二种判断方式 # while low < high: # if sort_list[high] < middle_value: # sort_list[low] = sort_list[high] # low += 1 # break # high -= 1 # # while low < high: # if sort_list[low] >= middle_value: # sort_list[high] = sort_list[low] # high -= 1 # break # low += 1 sort_list[low] = middle_value quick_sort(sort_list, start, low-1) quick_sort(sort_list, low+1, end) def merge_sort(sort_list): """归并排序""" lens = len(sort_list) if lens == 1: return sort_list middle_search = lens // 2 left_list = merge_sort(sort_list[:middle_search]) right_list = merge_sort(sort_list[middle_search:]) left_position, right_position = 0, 0 result_list = [] while left_position < len(left_list) and right_position < len(right_list): if left_list[left_position] > right_list[right_position]: result_list.append(right_list[right_position]) right_position += 1 else: result_list.append(left_list[left_position]) left_position += 1 result_list += left_list[left_position:] result_list += right_list[right_position:] return result_list if __name__ == '__main__': l1 = [random.randint(0, 50) for x in range(10)] print(l1) bubble_sort(l1) print(l1) l2 = [random.randint(0, 50) for x in range(10)] print(l2) selection_sort(l2) print(l2) l3 = [random.randint(0, 50) for x in range(10)] print(l3) insert_sort(l3) print(l3) l4 = [random.randint(0, 50) for x in range(10)] print(l4) shell_sort(l4) print(l4) l5 = [random.randint(0, 50) for x in range(10)] print(l5) quick_sort(l5, 0, len(l5)-1) print(l5) l6 = [random.randint(0, 50) for x in range(10)] print(l6) sort_list = merge_sort(l6) print(sort_list)
python实现常见的算法排序
最新推荐文章于 2023-05-13 15:27:21 发布