import random import math import queue num_lib = [random.randint(1, 10) for i in range(10)] print(num_lib) def buble_sort(): for j in range(len(num_lib)-1): for i in range(len(num_lib)-1): if num_lib[i] < num_lib[i+1]: num_lib[i],num_lib[i+1] = num_lib[i+1],num_lib[i] print(num_lib) #选择排序,采用额外新增列表的方式实现 def select_sort(): sort_list = [] for i in range(len(num_lib)): temp_num = 0 for j in range(len(num_lib)): if num_lib[j] > temp_num: temp_num = num_lib[j] sort_list.append(temp_num) num_lib.remove(temp_num) print(sort_list) #选择排序,采用不新增列表的方式实现,顺序取出值和剩下的结果进行比较,将最大的值放在未排序的前方,不停的交互索引位置 def select_sorts(): for i in range(len(num_lib)): for j in range(i,len(num_lib)): if num_lib[j] > num_lib[i]: num_lib[i],num_lib[j] = num_lib[j],num_lib[i] print(num_lib) #插入排序,顺序取出值和前边已经取出的值进行比较,将值放在指定的位置,和选择排序相对,一个是和未进行排序的结果进行比较放入,另一个是和已进行排序的结果进行比较放入 def insert_sorts(): for i in range(len(num_lib)): for j in range(i): if num_lib[i] > num_lib[j]: num_lib[i],num_lib[j] = num_lib[j],num_lib[i] # print(num_lib) return num_lib #快速排序,采用分治的方法,不停的将数据进行二分,直到无法继续分为止后输出结果,分治思想比较浓重。本意应是随机取一个数,将大于这个数的值,全部放到左边,小于这个数的值放到右边,然后不停的进行分治,直到最后无法进行分即可 def quick_sort(num_lib): if len(num_lib) <= 1: return num_lib else: l_list = [] r_list = [] for i in range(1,len(num_lib)): if num_lib[0] < num_lib[i]: l_list.append(num_lib[i]) else: r_list.append(num_lib[i]) l_list.append(num_lib[0]) return quick_sort(l_list) + quick_sort(r_list) #归并排序 #计数排序,不需要进行比较就可以进行排序的算法理论 def count_sort(): max_vaule = max(num_lib) print(max_vaule) count_list = [0] * (max_vaule + 1) print(count_list) for num in num_lib: count_list[num] += 1 print(count_list) for i in range(1,len(count_list)): count_list[i] += count_list[i - 1] print(count_list) sort_arr = [0] * len(num_lib) for nums in num_lib: index_arr = count_list[nums] - 1 sort_arr[index_arr] = nums count_list[nums] -= 1 print(sort_arr) #从30个人中选择15个,所有人围成一圈数1-9的数,喊到9的人出列即可 #让每个人报数,按照1-9对每次报数的人进行记录,将报到9的人剔除即可(在这里其实也是用基础的排序,即30人的编号作为起始的编号,主要信息:初始化编号和每个人所报数字,且每报到9后需要重新从1开始报数) def nine_retire(): origin_num = [i for i in range(1,31)] temp_list = [] s = 0 while len(origin_num) > 15: for j in origin_num: s += 1 if s % 9 == 0: temp_list.append(j) origin_num.remove(j) s = 1 print(origin_num) print(temp_list)
基础算法python实现,许多基础算法借鉴意义比较大,比如排序,我们总是会觉得,要想排序,比较必不可少,但其实我们发现不用经过比较也可以实现排序。思维方式上的转变。