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