排序算法
文章平均质量分 56
Mark_Aussie
这个作者很懒,什么都没留下…
展开
-
几种排序算法总结(九)--基数排序
基数排序是一种非比较排序算法, 将整数按位数切割成不同的数字,然后按每个位数分别比较。 先找到列表最大的数,计算出最大的位数, 从个位开始比较排序直到最大的位数。 基数排序 vs 计数排序 vs 桶排序 这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异: 基数排序:根据键值的每位数字来分配桶; 计数排序:每个桶只存储单一键值; 桶排序:每个桶存储一定范围的数值; def RadixSort(list): i = 0 # 初始为个位排序 n = 1 # 最小的位数置.原创 2020-11-30 14:02:26 · 167 阅读 · 0 评论 -
几种排序算法总结(八)--堆排序
堆排序利用堆数据结构的一种排序算法。 堆是一个近似完全二叉树的结构,并同时满足堆积的性质: 即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: 1. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; 2. 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 堆排序的平均时间复杂度为 Ο(nlogn)。 算法步骤 1. 创建一个堆 H[0……n-1]; 2. 把堆首(最大值)和堆尾互换; 3.原创 2020-11-30 13:59:35 · 135 阅读 · 0 评论 -
几种排序算法总结(七)--计数排序
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 先声明一个大于等于目标数列大小的列表, 将目标列表中的元素对应到创建的列表中, 循环填充后的列表,按顺序填入目标列表。 def counting_sort(sample, max_value): bucket_len = max_value + 1 bucket = [0] * bucket_len sorted_index = 0 sample_len = len(sample) for.原创 2020-11-30 13:55:34 · 150 阅读 · 0 评论 -
几种排序算法总结(六)--快速排序
快速排序原创 2020-11-30 13:51:33 · 162 阅读 · 0 评论 -
几种排序算法总结(五)--归并排序
归并排序(Merge sort)该算法是采用分治法(Divide and Conquer)的典型应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 1. 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 2. 自下而上的迭代; 和选择排序一样,归并排序的性能不受输入数据的影响,始终都是 O(nlogn) 的时间复杂度;需要额外的内存空间。 算法步骤 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列; 设定两个指针,最初位置分别为两.原创 2020-11-30 13:45:39 · 240 阅读 · 0 评论 -
几种排序算法总结(四)--希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时效率高,可达到线性排序的效率; 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位; 希尔排序的基本思想是: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序, 待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 算法步骤 1. 选择一个增量序列 t1,t2,……,tk.原创 2020-11-30 11:07:49 · 128 阅读 · 0 评论 -
几种排序算法总结(三)--插入排序
算法步骤 将待排序序列第一个元素看做一个有序序列, 把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置; 如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。 def insert_sort(sample: list): for i in range(1, len(sample)): pre_index = i - 1 current = sample[i] .原创 2020-11-30 10:54:26 · 102 阅读 · 0 评论 -
几种排序算法总结(二)--选择排序
选择排序:时间复杂度O(n2)(不随数据规模和内容改变), 适用于小规模数据,不占用额外内存。 算法步骤: 1. 循环数列,默认第一个值为最小值,存储其下标值。 2. 将第一个值和后面的值比较,如果大于后面的某值,替换之前的最小值下标, 循环到最后如果最小值下标不同于第一个值的下标,则将两个值交换。 3. 重复第二步,直到所有元素均排序完毕。 def choice_sort(sample: list): for i in range(len...原创 2020-11-30 10:22:53 · 99 阅读 · 0 评论 -
几种排序算法总结(一)--冒泡排序
排序算法可以分为内部排序和外部排序, 内部排序是数据记录在内存中进行排序, 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 时间复杂度: 平方阶 (O(n2)) 排序各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序快速排序、堆排序和归并排序; O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。希尔排序 线性阶 (O(n)) 排序基数排序,此外还有桶、箱排序。 稳定性:排序后 2 个相等.原创 2020-11-30 10:25:41 · 108 阅读 · 0 评论