
理论基础——排序
Alex_McAvoy
想要成为渔夫的猎手
展开
-
理论基础 —— 排序 —— 原始冒泡排序
【概述】冒泡排序是一种稳定的排序方法,也是交换排序中最简单的排序方法,其基本思想是:两两比较相邻记录的关键码,若反序则交换,直到没有反序为止。冒泡排序的实现依靠,双重循环,外层 i 控制进行多少轮,内层循环 j 控制每轮比较的次数,对于 n 个元素,共进行 n-1 趟交换,每趟比较 n-i 次。【排序过程】1.排序过程具体的排序过程为:将整个待排序的序列分为有序区和无序区,...原创 2018-02-07 00:04:02 · 840 阅读 · 0 评论 -
理论基础 —— 排序 —— 逆序对问题
【概述】设A为一个有n个数字的有序集,其中所有数字各不相同。如果存在整数i、j,使得1<=i<j<=n且A[i]>A[j],则{A[i],A[j]}这个有序对称为A的一个逆序对。例如:集合{3,1,4,5,2}的逆序对有{3,1}、{3,2}、{4,2}、{5,2}共4个。而逆序对问题,即:对给定的数组序列,求其逆序对的数量。【分析】从定义上分析,逆序对...原创 2018-04-20 13:17:26 · 1597 阅读 · 0 评论 -
理论基础 —— 排序 —— 归并排序
【概述】归并排序是一种稳定的排序方法,其是分治策略的一个非常典型的应用。其基本思想是:将 n 个待排序的记录看成是 n 个长度为 1 的有序序列,然后两两进行归并,第一轮得到 [n/2] 个长度为 2 的有序序列,第二轮得到 [n/4] 个长度为 4 的有序序列,以此类推,直到得到一个长度为 n 的有序序列。【排序过程】归并排序的核心是归并操作,即将两个已经排序的序列合并成一个序列...原创 2018-04-17 22:44:38 · 538 阅读 · 0 评论 -
理论基础 —— 排序 —— 基数排序
【概述】基数排序是一种稳定的排序方法,属于非比较类排序,其基本思想是:将待排序序列分到有限数量的桶中,每个桶再个别排序。简单来说,就是将数据分组,放在一个个桶中,然后对每组每个桶再进行排序。【过程】例如:要对大小为 [1..1000] 范围内的 n 个整数 A[1..n] 排序首先,可以把桶设为大小为 10 的范围,具体而言,设集合 B[1] 存储 [1..10] 的整数,集...原创 2018-04-17 22:09:01 · 701 阅读 · 0 评论 -
理论基础 —— 排序 —— 计数排序
【概述】计数排序是一种稳定的排序,属于非比较类排序,其基本思想是:对于给定的输入序列中的每一个元素 x,确定该序列中值小于 x 的元素的个数,一旦有了这个信息,就可以将 x 直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有 17 个元素的值小于 x 的值,则 x 可以直接存放在输出序列的第 18 个位置上。当然,如果有多个元素具有相同的值时,不能将这些元素放在输出序列的同一个...原创 2018-04-17 15:18:46 · 368 阅读 · 0 评论 -
理论基础 —— 排序 —— 桶排序
【概述】桶排序是一种稳定的排序方法,其是非比较类排序中最简单的一种。其基本思想是:假设待排序记录的值都在 0~m-1 之间,设置 m个桶,将值为 i 的记录分配到第 i 个桶中,然后再将各个桶中的距离依次收集起来。【时空复杂度分析】最好的情况下,每个桶只有一个数据,那么最好时间复杂度为 O(N)假设 C 为桶内排序所花费的时间,那么平均时间复杂度:O(N+C)此外,...原创 2018-04-17 15:04:43 · 700 阅读 · 1 评论 -
理论基础 —— 排序 —— 堆排序
【概述】堆排序是一种不稳定的排序方法,其利用了堆的性质来进行排序,是选择排序的一种。其基本思想是:将待排序的记录构成一个堆,然后不断将堆顶元素移走,并将剩余的记录调整成堆,直到堆空。关于堆:点击这里【实现过程】堆排序的实现步骤为:根据已有序列创建一个堆 heap[0..n-1] 堆首元素移除堆并加入至有序区,同时,将堆的尺寸缩小 1 将剩下的数据重新调整成堆,重复步骤...原创 2018-03-18 14:53:01 · 670 阅读 · 0 评论 -
理论基础 —— 排序 —— 希尔排序
【概述】希尔排序是一种不稳定的排序方法,其是对直接插入排序的改进。直接排序再基本本身基本有序时,只需要少量的插入操作,即可完成整个记录的排序工作,所谓基本有序,就是小的关键字基本在前,大的关键字基本在后,但基本有序的条件十分苛刻,难以达到。为了达到基本有序,采用跳跃分割策略,即将相距某个增量的记录组成一个子序列,这样保证子序列内分别进行直接插入排序得到的结果是基本有序而非局部有序。...原创 2018-03-18 10:13:54 · 539 阅读 · 0 评论 -
理论基础 —— 排序 —— 直接插入排序
【概述】直接插入排序是一种稳定的排序方法,其是插入排序中最简单的排序方法,类似于玩扑克时整理手牌的过程。其基本思想是:依次将待排序序列中的每一记录插入到一个已排好序的序列中,直到全部记录都排好序。其实现依靠双重循环完成,外层循环执行 n-1 次,内层循环执行次数取决于第 i 个记录前有多少个记录的关键码大于第 i 个记录的关键码。【排序过程】1.排序过程具体的排序过程为:...原创 2018-03-18 09:43:31 · 958 阅读 · 0 评论 -
理论基础 —— 排序 —— 快速排序
【概述】快速排序是一种不稳定的排序方法,其同样属于交换排序,是对冒泡排序的一种改进:在冒泡排序中,记录的比较与移动是在相邻位置进行的,记录每次交换只能后移一个位置,因而总的比较次数与移动次数较多;而在快速排序中,记录的比较与移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面,关键码较小的记录一次就能从后面移动到前面,由于记录移动的距离较远,从而减少了总的比较次数与移动次数。...原创 2018-03-12 21:38:43 · 1103 阅读 · 0 评论 -
理论基础 —— 排序 —— 鸡尾酒排序
【概述】鸡尾酒排序也称定向冒泡排序,是一种稳定的排序方法,其是原始冒泡排序的改进,也是交换排序的一种。定向冒泡排序与冒泡排序的不同在于其从低到高比较,然后再从高到低比较,如此循环往复,直到序列有序,而冒泡排序仅是从低到高的去比较序列中的每个元素。其实现借助两个指针来完成,一个作为头指针,负责从前向后扫描,一个作为尾指针,负责从后向前扫描,外层循环依靠指针控制数组左右边界,内层循环分别控...原创 2018-02-14 22:17:42 · 1060 阅读 · 0 评论 -
理论基础 —— 排序 —— 直接选择排序
【概述】直接选择排序又称简单选择排序,是一种不稳定的排序方法,其是选择排序中最简单一种,其基本思想是:第 i 趟排序再待排序序列 a[i]~a[n] 中选取关键码最小的记录,并和第 i 个记录交换作为有序序列的第 i 个记录。其实现利用双重循环,外层 i 控制当前序列最小值存放的数组元素位置,内层循环 j 控制从 i+1 到 n 序列中选择最小的元素所在位置 k【排序过程】1.排序...原创 2018-02-08 01:59:13 · 73809 阅读 · 18 评论 -
理论基础 —— 排序
【概述】1.通常所说的排序算法指的是内部排序算法,即:数据记录在内存中进行排序。2.排序算法大体可分为两种: 1)非线性时间比较类排序:交换类排序、插入类排序、选择类排序、归并排序,时间复杂度O(nlogn) ~ O(n^2)。 2)线性时间非比较类排序:计数排序、基数排序和桶排序,时间复杂度可以达到O(n)。3.总结: 1)比较类排序中,归并排序号称最快,其...原创 2019-06-02 20:12:24 · 799 阅读 · 0 评论