![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法基础
文章平均质量分 76
晨晚_
这个作者很懒,什么都没留下…
展开
-
基本排序算法 之二 ——选择排序
基本排序算法总结与对比之二 ——选择排序1、选择排序 选择排序的思路是每趟扫描数列,把最小的元素放到前面(或者把最大的元素放到前面)。template<typename T>void selectSort(T arr[], int lo, int hi){ int minIndex; //用来记录比较中最小元素的下标 ...原创 2019-05-23 23:53:11 · 218 阅读 · 0 评论 -
基本排序算法 之五 ——快速排序
基本排序算法总结与对比之五 ——快速排序1、快速排序 二路双向快排 版本 首先列出教科书上最普遍的版本:二路快排,准确的说 应该叫 二路双向快排。笔者认为这个应该是效率最为均衡的版本,网络上也流传着 三路快排,但是三路快排仅仅是在序列中存在大量重复元素时,才会发挥出其优势。在对 随机序列 和 近有序序列排序时,效率均低于二路双向快排。 ...原创 2019-05-24 00:01:04 · 1105 阅读 · 2 评论 -
基本排序算法 之三 ——插入排序
基本排序算法总结与对比之三 ——插入排序1、直接插入排序 直接插入排序过程如下图所示: ① 从第一个元素开始 仅一个3 为有序数列,紧跟有序数列后的 第一个元素 1 往有序数列里插入,形成包含 2 个元素1, 3 的有序数列; ② 紧跟有序数列后的 第一个元素 4 往有序数列里插入,形成包含 3 个元素1, 3, 4的有序数列...原创 2019-05-23 23:56:46 · 368 阅读 · 0 评论 -
基本排序算法 之一 ——冒泡排序
基本排序算法总结与对比之一 ——冒泡排序1、未改进的冒泡排序 —— 标准冒泡排序template<typename T>void bubbleSort(T arr[], int len){ for(int i = 0; i < len - 1; i++) { for(int j = 0; j < len - 1 - ...原创 2019-05-23 23:48:06 · 428 阅读 · 0 评论 -
十大排序基础排序算法总结 与 速度对比
1、十大排序基础排序算法总结 与速度对比 —— 耗时测试 测试环境:CPU: i5-3210M 2.5GHz 2.5GHz; 内存:4G; Win10 64位系统; VS 2015 release模式 32位。 测试数据均为 int 类型: 取值规则为:(rand() % (N)) * 3 - ra...原创 2019-05-23 23:46:17 · 4527 阅读 · 2 评论 -
基本排序算法 之十 ——基数排序
基本排序算法总结与对比之十 ——基数排序首先 基数排序分为 两类: 第一类:最低位优先法,简称LSD法:先从最低位开始排序,再对次低位排序,直到对最高位排序后得到一个有序序列。本文将介绍这种方法。 第二类:最高位优先法,简称MSD法:先从最高位开始排序,再逐个对各分组内部按次高位进行子排序,循环直到最低位。这种方法的优势是可以处理长度不一致的数据,...原创 2019-05-24 00:10:20 · 2204 阅读 · 1 评论 -
基本排序算法 之九 ——桶排序
基本排序算法总结与对比之九 ——桶排序1、桶排序 桶排序是对基数排序的演绎。计数排序是一个萝卜(相同的数)一个坑,而桶排序是几个萝卜(一定范围的数)一个筐。桶排序是将数据分到有限个桶中,然后对每个桶中的数据再排序(可能继续用桶排序,也可能用其他的排序方法)。 那么要解决的问题是: ① 怎么划分桶?即 数据该划分为几个范围(分几个桶的问...原创 2019-05-24 00:08:17 · 519 阅读 · 0 评论 -
基本排序算法 之八 ——计数排序
基本排序算法总结与对比之八 ——计数排序1、计数排序 前面介绍的七种排序算法都属于 基于比较的排序算法(CBA式算法)。这类算法的共同点就是:时间复杂度最优只能到O(nlogn)。接下来包括这次介绍的三种算法都属于非比较算法,其时间复杂度平均情况下均为O(k·n),k为常数。 计数排序又叫鸽巢排序。就是用一个与 数列最大数数值 相等长度 的数组...原创 2019-05-24 00:06:38 · 916 阅读 · 0 评论 -
基本排序算法 之七 ——堆排序
基本排序算法总结与对比之七 ——堆排序1、堆排序 递归版本 首先放递归的版本,因为递归版本更容易理解过程。 堆排序实际是把数列看成一颗完全二叉树,而不是真的去用 指针结构体 构造一颗二叉树。数列在堆中从上到下,从左至右依次排成一棵树。 下面是递归版本的代码//用来调整节点,保证节点大于左右孩子template<type...原创 2019-05-24 00:04:50 · 217 阅读 · 0 评论 -
基本排序算法 之四 ——希尔排序
基本排序算法总结与对比之四 ——希尔排序1、希尔排序 希尔排序实质是不断对数组分组,并对每组数据进行插入排序,分组由 len/step组 直到1组(len为数组长度,step为分组长度)。 本质上讲,希尔排序算法是直接插入排序算法的一种改进,分组后数据移动长度变短,减少了其复制的次数,速度要快很多。template<typename ...原创 2019-05-23 23:58:39 · 636 阅读 · 0 评论 -
基本排序算法 之六 ——归并排序
基本排序算法总结与对比之六 ——归并排序1、归并排序 递归版本template<typename T>void mergeSort(T arr[], int lo, int hi){ if(hi - lo < 2) return; int mi = (lo + hi) >> 1; mergeSort(arr, lo,...原创 2019-05-24 00:02:58 · 360 阅读 · 0 评论