算法
Glenn27
这个作者很懒,什么都没留下…
展开
-
常用排序代码解析--计数排序
计数排序 计数排序是基于比较的排序算法,优势在于对一定范围内的整数排序时,它快于任何比较算法。计数排序对输入的数据有附加的限制条件。 1.输入的线性表的元素属于有限偏序集S; 2.设输入的线性表的长度为n,|S|=k(k表示几何S中元素的总数目为k),k=O(n) 算法步骤: 扫描整个集合S,对每一个Si∈S,找到在线性表中小于等于Si的元素个数T(Si) 搜索整个线性表L,对L中的每一个元素Li, 将Li放在输出线性表的第T(Li)个位置上,并将T(Li)减1. 代码实现: C++代码: void c原创 2020-09-18 15:50:27 · 169 阅读 · 0 评论 -
常用排序代码解析--基数排序
基数排序 基数排序:是桶排序的扩展,将整数位数切割成不同的数字,然后按照每个位数分别比较 算法步骤 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零 从对低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序后,数列就变成一个有序序列 代码实现 c++代码实现: int max_bit(int num[], int len){ //获取数组中最大位数 int bit = 1; int radix = 10; for (int i = 0; i < len;原创 2020-09-18 15:43:07 · 336 阅读 · 0 评论 -
常用排序代码解析---堆排序
堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均是O(nlogn),它也是不稳定排序 堆:堆是具有以下性质的完全二叉树:每个节点值都大于或等于其左右孩子节点的值,称为大顶堆;或每个节点的值都小于或等于左右孩子节点的值,称为小顶堆 大顶堆:arr[i] >= arr[2 * i +1] && arr[2 * i + 2]; 小顶堆:arr[i] <= arr[2 * i + 1]&& arr[2 *原创 2020-09-18 15:36:13 · 99 阅读 · 0 评论 -
常用排序代码解析--快速排序
快速排序 快速排序是一种高效且使用广泛的排序算法,使用分治法策略来把一个串行分为两个串行 算法步骤: 从数列中挑出一个元素,称为“基准” 重新排序数列,所有元素比基准小的摆放在基准前面,所有元素比基准值大的摆放在基准的后面(相同的数可以放一边)。这个分区退出之后,改基准就处于序列的中间位置 递归地把小于基准元素的子数列和大于基准元素的子序列排序 代码实现: C++代码实现: split算法实现:使用单向指针对数组进行遍历,首先将数组首元素设置为基准元素,然后再将第二个开始的元素依次与基准元素比较 voi原创 2020-09-18 15:26:00 · 171 阅读 · 0 评论 -
常用排序代码解析--归并排序
归并排序: 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略。将已有的子序列合并,得到完全有序的序列。即先使子序列有序,再使子序列段间有序。若将两个有序的表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。 算法步骤: 申请空间,使其大小为两个已排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置分别为两个已经排序序列的起始位置 比较两个指针所指向的元素,选择相对小的元素放入合并空间,并移动相对较小元素的指针到下一个位置 重复步骤3直到某一指针达到序列尾 将另一个序原创 2020-09-18 14:59:11 · 155 阅读 · 0 评论 -
常用排序代码解析--冒牌排序
冒泡排序: 冒泡排序是一种简单直观的排序方法,它重复的走访过要排序的序列,一次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来 算法步骤: 比较相邻的元素,如果第一个比第二个大(小),就交换它们 对每一对相邻元素做同样的工作,从开始第一对,到结尾最后一对。在这一点,最后的元素应该会是最大(小)的数。 针对所有的元素重复以上的步骤,除去最后一个 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数组需要比较 代码实现: C++代码实现: void bubble_sort(int num[],原创 2020-09-18 11:21:24 · 243 阅读 · 0 评论 -
常用代码解析--选择排序
选择排序: 选择排序是一种直观的排序算法 算法步骤: 初始状态:无序区为R[1…n]],有序区为空。 从无序区R[1…n]中选择一个小(大)的记录R[k],将它与无序区第一个记录R[1]交换,使R[1…1]和R[2…n]分别变为记录个数增长加1的新有序区和记录减少1个的无序区 第i趟排序,i趟排序重复上 1 的步骤,最后得到R[1…i-1]和R[1…n]的有序和无序区 代码实现: C++代码实现: void select_sort(int *array, int length){ for (int原创 2020-09-18 11:13:45 · 122 阅读 · 0 评论 -
常用排序代码解析--希尔排序
希尔排序: 希尔排序又被称为递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是一种非常稳定的算法。 算法步骤: 选择一个小于n的整数d1作为第一个增量,将所有数组全部记录分组(距离d1的倍数的记录放在同一组) 先在各组内进行直接的插入排序 取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1 代码实现: C++代码实现: 方法一:进行分组 void shell_sort(int *array, int length){ int i, j, k, dk, temp; f原创 2020-09-18 11:03:57 · 215 阅读 · 0 评论 -
常用排序代码解析----插入排序
插入排序 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法步骤 1.将第一个待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素看做无序序列。 2.从头到尾一次扫描未排序序列,将扫描到的每个元素插入有序序列适当位置。(如果插入的元素与有序序列某个元素相等,则将待插入元素插入到相当元素的后面) 代码实现 C++代码实现: void insert_sort(int *Num, int len){ //插入排序 for (int i = 1; i &原创 2020-09-18 10:45:09 · 174 阅读 · 0 评论