
排序算法
文章平均质量分 59
你好,冯同学
这个作者很懒,什么都没留下…
展开
-
归并 排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。原创 2021-12-09 11:10:02 · 1571 阅读 · 2 评论 -
计数 排序
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序)原创 2021-12-08 15:25:23 · 384 阅读 · 1 评论 -
快速排序---递归以及非递归
文章目录一、快速排序的基本思想二、代码实现——三种递归1.hoare版本(左右指针法)2.挖坑法3.前后指针法三、代码实现——快排之非递归总结 一、快速排序的基本思想 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。下面我们将实现快速排序的(三种)递归算法和非递归算法原创 2021-12-02 12:01:45 · 1829 阅读 · 1 评论 -
直接选择排序
文章目录一、直接选择排序的基本思想二、使用步骤1.引入库2.读入数据总结 一、直接选择排序的基本思想 选择排序就是每一次从待排序的数据元素当中,选择最小或者最大的一个元素,如果是选最小的,就放序列的起始位置(假如是升序),如果是选最大的,就放在序列的末尾(假如是升序),直到全部待排序的数据元素排完 。 直接选择排序: 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的arra原创 2021-11-29 19:55:00 · 1128 阅读 · 1 评论 -
冒泡 排序
文章目录一、冒泡排序的基本思想二、代码实现总结 一、冒泡排序的基本思想 冒泡排序的基本思想是交换排序 所谓交换:就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 二、代码实现 代码如下(示例): void swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } //写法 1 void BubbleSort(int* a, int n)原创 2021-11-28 18:13:40 · 1169 阅读 · 1 评论 -
希尔 排序
文章目录一、希尔排序的基本思想二、代码实现2.读入数据总结 一、希尔排序的基本思想 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后再减小gap的值,重复上述分组和排序的工作。当到达gap=1时,所有记录在统一组内排好序。如果对希尔排序不是很理解,我们就需要画图来帮助我们理清思路: 二、代码实现 代码如下(示例): void ShellSort(int* a, int n)//希尔排原创 2021-11-27 19:39:34 · 376 阅读 · 2 评论 -
直接插入排序
文章目录一、插入排序的基本思想二、代码实现总结 一、插入排序的基本思想 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 实际中我们玩扑克牌时,就用到了的插入排序的思想 当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,.原创 2021-11-26 20:53:33 · 1353 阅读 · 1 评论