排序算法
文章平均质量分 50
白日梦想猿
一只会做白日梦的猿!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
10大排序算法的性能比较,计数排序简直逆天?
首先先给大家列出每种排序的具体实现(全部都是用python实现的!)# 冒泡排序# 选择排序# 插入排序# 快速排序# 堆排序# 归并排序# 希尔排序# 计数排序# 桶排序# 基数排序测试代码# -*- coding: UTF-8 -*-''' *****************LLL********************* * @Project :排序算法 * @File :lll13_十大排序原创 2022-05-09 12:18:29 · 1447 阅读 · 3 评论 -
python实现基数排序
思路先比较个位数,得到一个新的序列;再按照十位数排序,在上一个新序列的基础上又得到一个新的序列;然后再按照百位数排序,在上一个新序列的基础上又得到一新的序列;只到排到所有数中的最高位,依次输出列表,排序结束。栗子例:li=[12,90,4,894,66]可以看到,最高位有百位,因此我们可以将li看成是[012,090,004,894,066]###################################################################原创 2022-05-09 11:50:17 · 722 阅读 · 0 评论 -
python实现桶排序,听这名字挺奇怪的?
前言不知道大家还记不记得计数排序 在计数排序中,需要根据最大值和最小值创建一个列表,如果最大值和最小值的差很大,即使需要排序的数据并不是很多,那么就会照成不必要的浪费,因为不管需要排序的数有多少,都需要创建一个长度为(最大值-最小值+1)的列表桶排序的由来鉴于上面这一点,我们可以进行分块排序,每一块用一个列表来表示(每一个列表都用来存放对应区间的数),将这个列表看成是一个桶(这也是为什么叫桶排序),将某个数放到对应的桶中,最后合并这些桶就得到了有序的序列。栗子原创 2022-05-07 11:02:46 · 548 阅读 · 0 评论 -
python实现希尔排序(选择排序的进一步优化)
def insert_sort(li, gap): li_len = len(li) for i in range(gap, li_len): # 无序区[i,li_len) j = i - gap # 有序区的索引 tmp = li[i] while j >= 0 and tmp < li[j]: # 只要当前抽到的元素小于有序区中的元素,有效区中的元素就后移gap位 li[j + gap] =.原创 2022-05-07 09:48:01 · 504 阅读 · 0 评论 -
python实现计数排序——最简单的排序方式,没有之一?
前言和前面说的冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序相比,它们都是比较排序,在排序的过程中,都需要进行元素之间的比较,而今天的计数排序就不需要了。思路通过名称可以知道它的核心体现在计数,其实就是记录每一个数字出现的频率,但是得提前确定所有数字的区间,即得知道最大值和最小值,才能保证不会有遗漏。举例这里给出的需要排序的列表是:[1,2,6,2,3,1,4,4,5],所以最大值是6,最小值是1我在这里从0开始,依次列出区间内所有的数字,即:0,1,..原创 2022-05-05 15:36:14 · 967 阅读 · 2 评论 -
python实现归并排序
一次归并'''#一次归并操作如下:假设有一个列表,从某个位置切开,得到的两段都是有序的,则可以进行如下的排序:例: li=[2,3,4,0,1]从index=2开始,[2,3,4]和[0,1]都是有序的现设指针:low mid high low:指向0,左边列表的起始位置 mid:指向2,左边列表的结束位置(mid+1就是右边列表的起始位置,所以不需要额外设置) high:指向4,右边列表的结束位置临时列表li_tmp=[]从low和原创 2022-05-04 11:26:39 · 493 阅读 · 0 评论 -
python实现堆排序及topk问题
堆排序# 思路'''1.构造堆2.挨个出数(每次选出一个最大(小)的数)时间复杂度:nlogn'''# 构造堆def sift(li, low, high): ''' :param li:列表 :param low:堆的根节点 :param high:堆的最后一个叶子节点 :return: ''' i = low # i最开始指向根节点 j = 2 * i + 1 # j一开始指向i的左孩子 tmp原创 2022-05-04 11:24:43 · 659 阅读 · 0 评论 -
室友1把王者的时间写出了快速排序?(python实现)
前言"欢迎来到王者荣耀,敌军还有5秒钟达到战场!请做好准备!"战争的号角已吹响!本次我方上场的英雄有:小鲁班,诸葛亮,廉颇,韩信,后羿。还没走出泉水,机智的诸葛亮就率先提出作战策略:游戏可以输,姿势一定要帅!看咱现在这站位,高高低低,乘次不齐,一点排面都没有!韩信也马上补充道:“没错!你看这个廉颇,又矮又胖,他还站在C位,你说这像话吗???”(此时,站在一旁的小鲁班悄悄地想旁边挪了一下)憨厚的廉颇:我 我。。。诸葛亮扶了扶眼镜框马上补充道:在座的各位,..原创 2022-04-29 12:39:32 · 2494 阅读 · 0 评论 -
python实现插入排序
思路'''假设有一个有序区(一开始只有一个元素),依次在无序区中选择一个元素将其按照大小插入到有序区中,直到所有无序区的元素都插入到有序区,排序结束时间复杂度:O(n²)'''@clockeddef insert_sort(li): li_len = len(li) for i in range(1, li_len): # 无序区[i,li_len) j = i - 1 # 有序区的索引 tmp = li[i]原创 2022-04-28 19:15:25 · 455 阅读 · 0 评论 -
python实现选择排序
思路# 思路:每次选择出列表中的最大(小)值,然后将其从列表中移除,并将移除的值依次排列基础版@clockeddef select_sort(li): li_len = len(li) new_li = [] for i in range(li_len): # 选出最小元素 min_val = min(li) # 删除这个元素 li.remove(min_val) # 将这个元素添加原创 2022-04-28 18:23:06 · 425 阅读 · 0 评论 -
别小瞧冒泡排序,优化一下不也挺快的嘛?(python实现)
基础版# 冒泡排序def bubble_sort(li): li_len = len(li) for i in range(li_len - 1): for j in range(i + 1, li_len): if li[i] > li[j]: # 只要当前数字比下一个大,就将它向上移动 li[i], li[j] = li[j], li[i]优化版一# 优化:是不是每一次都要比较到末尾?'原创 2022-04-27 18:50:12 · 518 阅读 · 0 评论
分享