![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python数据结构和算法
力学猿
在路上的小白一枚
展开
-
python排序算法之基数排序
#代码如下:'''基数排序:1.把数据分为10个桶,以为数字有0-9这10个2.依次把数据的个位,十位,百位等等各个位数的数据进行分桶,放在这10个桶中3.最大的数有k位,则循环k次4.时间复杂度O(kn),空间复杂度O(k+n),其中k=log10(n)+1''''''基数排序:1.把数据分为10个桶,以为数字有0-9这10个2.依次把数据的个位,十位,百位等等各个位数的数据进行分桶排序,放在这10个桶中3.最大的数有k位,则循环k次4.时间复杂度O(kn),空间复杂度O(k+n原创 2021-09-16 22:45:55 · 381 阅读 · 2 评论 -
python排序算法之桶排序
桶排序主要适用于全是数字的列表排序代码如下:def buckrt_sort(li, n=100, max_num=10000): bucket = [[] for _ in range(n)] #创建桶 for var in li : i = min(var//(max_num//n), n-1)#第i个桶 bucket[i].append(var)#在每个桶中加入相对应的数 for j in range(len(bucket[i])-原创 2021-09-16 21:47:37 · 386 阅读 · 0 评论 -
python实现希尔排序
希尔排序代码如下:'''希尔排序:排序的时间复杂度由gap决定,一般比low b三人组要快,比NB三人组要慢基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。'''def insert_sort_gap(li,gap): for i in range(gap, len(li)): temp = li[i] j = i - gap whil原创 2021-09-16 18:21:41 · 115 阅读 · 0 评论 -
python实现排序算法NB三人组之堆排序,以及topK问题实现
堆排序代码如下:'''堆排序:时间复杂度:O(n*logn)实现较大数据n的topk问题'''def sift(li, low, high): ''' :param li: 列表 :param low: 根节点 :param high: 最后一个节点 :return: ''' i = low j = 2*i+1 #j是i的左孩子 temp = li[low] #把堆顶存起来 while j<=high:原创 2021-09-16 18:10:36 · 111 阅读 · 0 评论 -
python实现排序算法NB三人组之归并排序
归并排序思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。代码如下:# 从两个有顺序的列表里边依次取数据比较,把li[low,mid]和li[mid,right]看做是两个列表,# 每次我们分别拿出两个列表中最小的数比较,把较小的放入tempdef merge(li, low原创 2021-09-16 16:14:48 · 133 阅读 · 0 评论 -
python实现排序算法NB三人组之快速排序
快速排序思想:先使得数列中第一个数排在数列中正确的顺序,左边的数都不大于该数,右边的数都不小于该数再用递归使得整个数列排序成功代码如下:#使得数列中第一个数排在数列中正确的顺序,左边的数都不大于该数,右边的数都不小于该数def partition(li,left,right): temp = li[left] while left<right: while left < right and li[right]>=temp:#从右边找比temp小的数原创 2021-09-16 10:18:00 · 128 阅读 · 0 评论 -
python实现排序算法lowb三人组之插入排序
插入排序思想:将一个列表看成一个有序列表和无序列表,从无序列表中的第一个数据插入到已经排好序的列表中,从而得到一个新的有序的数据数+1的列表实现:总共两个循环,外循坏是表示要插入的元素,共需插入n-1趟,内循环是对当前有序数列进行插入位置查找,并把数据插入到该位置中代码实现def insert_sort(li): for i in range(1,len(li)): #表示要插入的数据的下标 temp = li[i] j = i-1 whil原创 2021-09-16 09:48:28 · 127 阅读 · 0 评论 -
python实现排序算法lowb三人组之选择排序
选择排序思想:找到列表中第i小的数据,与列表中第i个数据交换位置,即每趟排好一个数的序,共排n-1趟完成排序(从小到大排序)代码如下:def select_sort(li): for i in range(len(li)-1): #i是第几趟,总共n-1趟 min_loc = i #最开始假设最小值为无序区第一个数的下标, for j in range(i+1,len(li)):#在无序区中找到最小值的下标 if原创 2021-09-14 08:01:15 · 98 阅读 · 0 评论 -
python实现排序算法lowb三人组之冒泡排序
冒泡排序:1.从头开始两两数据相比,如果左边数比右边数大则交换两个数的位置2.每一趟排序,有序区多一个数,无序区少一个数,总共需要排n-1趟3.改进的冒泡排序需要加个标志位判断是否需要继续排序,如果是已经排好序的列表改进的冒泡只需要排序一趟,而没有改进的需要排序n-1趟4.python代码如下:#从大到小排序def bubble_sort(li): for i in range(len(li)-1): # 排序n-1趟 for j in range(len(li)-i-1原创 2021-09-13 11:28:11 · 117 阅读 · 0 评论