
排序
CC_YXK
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
希尔排序
希尔排序是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序 算法描述: 先将整个待排序的记录序列分割成若干子序列分别进行直接插入排序,具体算法描述位: 选择一个增量序列t1,t2,......,tk,其中ti > tj, tk = 1; 按增量序列个数k,对序列进行k趟排序; 每趟排序,根据对应的增量ti,将待排序列分割成若...原创 2018-10-22 15:46:59 · 135 阅读 · 0 评论 -
快速排序
快速排序使用分治的思想:通过一趟排序将待排记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 算法描述: 快速排序使用分治法来把一个串分为两个子串,具体如下: 从数列中挑出一个元素,称为“基准” 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准大的摆在基准的后面。在这个分区退出后,该基准...原创 2018-10-22 16:45:31 · 130 阅读 · 0 评论 -
堆排序
首先,明确两个概念: 大根堆:一棵树中,任意一个子树,其父节点都大于左右孩子。 小根堆:一棵树中,任意一个子树,其父节点都小于左右孩子。 算法描述: 将初始待排序关键字序列构建成大根堆,此堆为初始的无序堆。 将堆顶元素与最后一个元素交换,然后缩小该堆,将当前堆的最后一个元素剔除(逻辑上剔除)得到新的无序堆。 继续将该无序堆调整为大根堆。 继续将堆顶元素与当前堆最后一个元素交换,这样每次...原创 2018-10-22 17:12:45 · 133 阅读 · 0 评论 -
二路归并排序
归并排序是建立在归并操作操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完整有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 算法描述: 把长度为n的输入序列分为两个长度为n/2的子序列 对这两个子序列分别采用归并排序 将两个排序好的子序列合并成一个最终的排序序列 代码实现: ...原创 2018-10-22 20:50:00 · 340 阅读 · 0 评论 -
基数排序
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;以此类推,直到最高位。 算法描述: 取得数组中的最大数,并取得位数 arr为原始数组,从最低位开始取每个位放进0~9 十个队列中(如该位是3,就放进队列3) 按顺序从队列中取出数据到arr 依次循环,直到最高位也完成该操作 代码实现: # include<stdio.h> # include<std...原创 2018-10-22 21:48:49 · 160 阅读 · 0 评论 -
冒泡排序
冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现: # include<stdio.h> # include<...原创 2018-10-21 21:21:12 · 703 阅读 · 0 评论 -
选择排序
排序原理: 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个...原创 2018-10-21 21:33:36 · 110 阅读 · 0 评论 -
直接插入排序
排序原理: 从第二个数开始,往前找它合适的位置,将其插入满足数组有序,依次寻找第三个、第四个......第n个元素的合适位置,完整之后,整个数组有序 代码实现: # include<stdio.h> # include<stdlib.h> # include<assert.h> void InsertSort(int *arr, int...原创 2018-10-21 22:14:53 · 149 阅读 · 0 评论