排序算法
叫我小者呀
这个作者很懒,什么都没留下…
展开
-
排序算法——各算法性能
各排序算法的性能总结最后,在这里对前面所写的八众排序进行一个算法性能总结。到这里,八种排序算是全部写完了。原创 2021-04-01 20:10:20 · 137 阅读 · 0 评论 -
排序算法——基数排序
基数排序1.基数排序的思想针对于有多个关键字的排序算法。先按照一个关键字进行排序,完成后在按另一个关键字排序。先按照权重小关键字排序,在按照权重大的关键字排序。按照每个关键字的值的范围,定义上相同数量的队列。对于数字我们先按照个位进行排序,然后在按照十位排。2.基数排序的实现// 获取最大数据的位数int GetDigit(int *arr, int len){ int max = arr[0]; for (int i = 0; i < len; ++i) { if (ma原创 2021-04-01 20:07:12 · 169 阅读 · 0 评论 -
排序算法——归并排序
二路归并排序7.1 二路归并排序的思想一次排序过程,将已经各自有序的两个段的数据合并一个段,并且合并后依旧有序。第一次我们认为单个数据是有序的,一个数据就是一个段,一次排序后,两个数据就是一个有序数据段,这样下一次每个有序数据段就是两个数据。最后将其合并成一个完成有序段,则整个数据就已经排序好了。7.1二路归并排序的实现void Meger(int *arr, int len, int width, int *brr){ int low1 = 0; int high1 = low1 +原创 2021-04-01 19:57:24 · 107 阅读 · 0 评论 -
排序算法——堆排序
堆排序1.基础概念二叉树的概念:二叉树(binary tree)是指树中节点的 度 不大于2的有序树. 在二叉树中除了根节点的每一个节点都仅有一个父节点,所有的节点最多只能有两个孩子节点。满二叉树的概念:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。国内教材定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。国外(国际)定义:a binary tr原创 2021-04-01 17:37:33 · 212 阅读 · 0 评论 -
排序算法——选择排序
选择排序2.1选择排序的思想先遍历一遍整个待排序数据,找到当前最大的值的 位置 。将标记的最大值与当前最后一个元素交换。重复上述过程,直到只剩下一个数据。上面的步骤每做一次,下一次就少遍历一个数据(本次找到的最大值)选择排序执行的趟数:数据元素的个数 len - 12.2选择排序的实现/*时间复杂度: O(n^2)空间复杂度: O(1)稳定性: 不稳定*/void SelectSort(int *arr, int len){ for (int j = 0; j < l原创 2021-04-01 17:11:46 · 77 阅读 · 0 评论 -
排序算法——希尔排序
希尔排序 – 增量排序1.希尔排序的思想现将数据分成d个组, 在每个分组内使用直接插入排序算法排序 – 目的就是使得整个数据序列越来越有序。接着将数据继续分组(分组数会越来越小),然后排序, 最后一次分组肯定为1。每个分组数一般是互质的。2.希尔排序的实现void Shell(int *arr, int len, int group){ for (int i = group; i < len; ++i) // i负责遍历整个数据段, 控制本次直接插入排序处理那一组的数据 { in原创 2021-04-01 13:48:25 · 122 阅读 · 0 评论 -
排序算法——直接插入排序
直接插入排序1.直接插入排序的思想将数据分成两部分,前一段是已经有序的数据(初始时,前一段数据只有一个),后一段都是无序数据。从无序数据中拿一个数据(左边的第一个数据),插入到前一段的有序数据中,并且使得有序数据段依旧有序。重复上述过程,直到无序数据没有数据。做一次插入排序后:2.直接插入排序的实现/*时间复杂度:O(n^2)空间复杂度:O(1)稳定性: 稳定*/void InsertSort(int *arr, int len){ for (int i = 1.原创 2021-04-01 13:29:21 · 204 阅读 · 2 评论 -
排序算法——冒泡排序
冒泡排序1.冒泡排序的思想一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换 – 将最大的元素交换到整个数据的最后。排序的趟数: 数据元素的个数: len - 12.冒泡排序的实现/*时间复杂度:O(n^2)空间复杂度:O(1)稳定性: 稳定的*/void BubbleSort(int *arr, int len){ for (int j = 0; j < len - 1; ++j) { bool flag = true; // fla.原创 2021-04-01 13:16:43 · 84 阅读 · 0 评论 -
排序算法——快速排序
快速排序1. 快排的思想先在数据中找一个基准数据 : 找待排序数据序列的第一个, 随机数, 三位数取中将数据按照基准数据分成两部分,前一段都比基准小,后一段都比基准大。按照同样的思想分别处理前一段和后一段数据。2.代码的实现(递归版)数据段为start到end之间的数据。先将基准数据(start位置)保存到tmp中,i=start,j = end。 在i<j的时候,重复执行以下两个过程。通过j从后往前找第一个比基准数据小的数据,找到后就将j位置的值赋值到i位置通过i从前向后.原创 2021-04-01 13:06:01 · 228 阅读 · 0 评论