排序算法
一只努力奋斗的小白1
这个作者很懒,什么都没留下…
展开
-
排序算法之堆排序
一、算法简介 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),是不稳定排序。 在这之前需要先对堆有一个比较清楚的认识: 堆是一个顺序存储的完全二叉树, 其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。 其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数...原创 2021-11-17 18:58:01 · 137 阅读 · 0 评论 -
十大排序算法之归并排序
一、算法简介 归并排序(Merge sort)是建立在归并操作上的一种稳定、有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 实现方法分为 自上而下的递归 自下而上的迭代 二、原理 1. 从下往上的归并排序:将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并;得到若干个长度为2的有序数列,再...原创 2021-11-17 14:02:34 · 898 阅读 · 0 评论 -
十大排序算法之希尔排序
一、算法简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一,希尔排序是非稳定排序算法 二、原理 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样...原创 2021-11-17 13:55:45 · 207 阅读 · 0 评论 -
十大排序算法之快速排序
一、算法简介 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。本质上来看,是在冒泡排序基础上的递归分治法。 在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。对绝大多数顺序性较弱的随机数...原创 2021-11-17 12:13:26 · 961 阅读 · 0 评论 -
十大排序算法之选择排序
一、算法介绍 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧 二、原理 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 三、程序 #include <stdio.h> #include <stdlib.h> #defin.原创 2021-11-17 10:52:43 · 136 阅读 · 0 评论 -
十大排序算法之插入排序
一、算法介绍 对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法。 插入排序的平均时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1),具体时间复杂度和数组的有序性也是有关联的。 插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较 N-1 次,时间复杂度为 O(N)。最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是 O(n^2)。 二、原理 通过构建有序序列,对于未...原创 2021-11-17 10:46:14 · 612 阅读 · 0 评论 -
十大排序算法之冒泡排序
一、原理 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 时间复杂度: 二、动图、 三、程序 #include <stdio.h> #include <stdlib.h> #define L 10 void printArray(int*); void bubbleSort(int*); i原创 2021-11-17 10:35:04 · 475 阅读 · 0 评论 -
排序算法简介
一、分类 排序算法可以分为比较类排序和非比较类排序 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序 二、算法复杂度 复杂度分为时间复杂度与空间复杂度两个指标,由于现在计算机硬件的发展,计算机内存大大提升,时间复杂度成为主要考虑因素。 三、相关概念 稳定:如果a原本在b前面原创 2021-11-17 10:21:55 · 257 阅读 · 0 评论