![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
FlowingDown
这个作者很懒,什么都没留下…
展开
-
基于Huffman算法实现文件压缩解压缩(C语言)
基于Huffman算法实现文件压缩解压缩(C语言)一、实现步骤统计源文件中字符种类和频率建立Huffman编码树生成Huffman编码表压缩文件时,字符匹配编码,将编码写入压缩后文件解压缩文件时,读取编码,匹配编码表中的字符,写入解压缩后的文件二、读取文件为了能够处理任何格式的文件,采用二进制方式读写文件,以一个无符号字符(unsigned char)的8位类型为一个处理单元,...原创 2019-07-18 20:08:44 · 3577 阅读 · 1 评论 -
排序算法(六):快速排序
一、算法原理快速排序(Quick sort)是一种应用最广泛的排序算法,实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。快速排序最大的优点是它是原址排序(只需要一个很小的辅助栈),且将规模为n的数组排序所需的时间与nlogn成正比,而前面学习过的冒泡排序、选择排序、插入排序和归并排序都无法将这两个优点结合在一起。快速排序的缺点是实现时容易造成低劣的性能,最坏情况时间能达...原创 2019-07-22 16:31:11 · 256 阅读 · 0 评论 -
排序算法(九):基数排序
一、算法原理基数排序(Radix sort)是用在卡片排序机上的算法,是一种非比较的排序算法。基数排序对十进制数的每一位进行排序,与直观感受不同的是,先按最低有效位进行排序,然后收集;再按次低位排序,再收集;依此类推,直到按最高位进行排序收集之后,数组整体完成排序。为了确保基数排序的正确性,每一位的排序算法必须是稳定的(例如,若a=b,排序后a与b的顺序不发生改变)。二、算法描述首先,找到...原创 2019-07-26 10:24:38 · 284 阅读 · 0 评论 -
排序算法(五):归并排序
一、算法原理归并排序(Merge sort)是一种建立在归并操作上的递归排序算法,该算法是采用分治法的一个典型的应用,归并排序将一个数组递归地分成两半分别排序,然后将结果归并起来。归并排序是一种稳定的算法,对任意长度为n的数组的排序时间与nlogn成正比,但它需要额外空间的规模与n成正比。二、算法描述把长度为n的数组分成两半对这两个子数组分别采用归并排序将两个排序好的子数组归并成一个排...原创 2019-07-21 11:23:44 · 337 阅读 · 0 评论 -
排序算法(四):希尔排序
一、算法原理希尔排序(Shell sort)是Donald Shell于1959年提出来的一种排序算法,它是插入排序的经过改进的一种更高效的排序算法。与插入排序只交换相邻元素不同的是,希尔排序交换不相邻的元素以对数组的局部进行插入排序,逐渐减小交换元素间隔不断微调数组。实现希尔排序的一种常用方法是把数组按一个增量gap分组,对每组按插入排序算法进行排序,随着增量逐渐减小,数组趋向整体有序,当...原创 2019-07-21 10:31:10 · 182 阅读 · 0 评论 -
排序算法(三):插入排序
一、算法原理通常人们整理扑克牌的方法就是一张一张来,将每一张扑克牌插入到已经有序的牌中的适当位置。为了给要插入的元素腾出空间,需要将这个位置之后的全部元素在插入之前都向后移动一位。这种算法就是插入排序(Insert sort)。与选择排序相同的是,当前位置左边的元素都是排序的,但它们的最终位置还不确定,为了给更小(或更大)的元素腾出位置,它们可能会被移动。当索引到达数组尾部时,数组排序就完成了。...原创 2019-07-21 09:33:40 · 224 阅读 · 0 评论 -
排序算法(八):计数排序
一、算法原理计数排序(Counting sort)的基本思想是:使用一个辅助数组C和B,其中C中第i个元素是待排序数组A中值为i的元素的个数,B是排序后的数组,对每一个输入元素x,确定小于x的元素的个数,利用这一信息,就可以直接把x放在它在输出数组中的正确位置上了。例如,如果有15个元素小于x,那么x就应该在第16个输出位置上。二、算法描述假设规模为n的数组中每个元素的值都是在[0…k]区间...原创 2019-07-25 11:22:35 · 379 阅读 · 0 评论 -
排序算法(二):选择排序
一、算法原理选择排序(Select sort)是一种简单直观的排序算法,基本原理是:首先查找数列中最小(或最大)的元素,然后将它和第一个元素交换;接着从第二个元素开始找到最小(或最大)的元素,将它和第二个元素交换;依此类推,直到数组整体排序。这种方法在不断选择剩余元素的最小(或最大)元素,因此称为选择排序。二、算法描述假定要将一个数组按升序规则排列,数组规模是n第一轮扫描从记录第一个元素...原创 2019-07-20 22:06:22 · 181 阅读 · 0 评论 -
排序算法(一):冒泡排序
排序算法(一):冒泡排序一、算法原理冒泡排序(Bubble sort)是一种比较简单的排序算法,从前到后依此检查数列的每一对相邻元素,一旦发现它们逆序就交换二者位置。显然一轮扫描一般不能达到整体排序,则需要重复进行这种扫描过程,直到数列整体有序。这种算法的名称由来是因为越小(或越大)的元素会经过交换慢慢浮到数列顶端。二、算法描述假定需要将一个数列按照升序规则排列。从头开始,若第一个...原创 2019-07-19 19:10:46 · 315 阅读 · 0 评论 -
排序算法(七):堆排序
一、算法原理堆排序(Heap sort)使用堆这样一种数据结构来进行数据管理,它与归并排序相同但不同于插入排序的是时间复杂度是O(nlogn);它与插入排序相同,但不同于归并排序的是具有空间原址性(任何时候都只需要常数个额外的元素空间存储临时数据)。因此堆排序结合了这两种排序算法的优点。堆(二叉堆)是一个数组,可以被看成一棵完全二叉树,除了最底层外,该树是完全充满的,而且是从左向右填充。给定一...原创 2019-07-23 10:21:55 · 255 阅读 · 0 评论