算法
fu0709281031
这个作者很懒,什么都没留下…
展开
-
读《算法导论》我来C语言实现(1)——插入排序
最近在重新温习算法导论,书里面的算法一段时间不看就会忘记,于是我就想重新用C语言码出来,等以后自己再用复习或要用的时候,直接阅读代码,更加方便。 书上讲的第一个算法也是个人认为最简单的一个——插入排序,作者把插入排序比作打扑克牌时的摸排并排序,很形象,下面是插入排序的代码: #include void insert_sort(int a[], unsigned int n) {原创 2012-11-15 21:30:17 · 1104 阅读 · 0 评论 -
读《算法导论》我来C语言实现(2)——合并排序
书上讲的第二个算法是合并排序,采用了分治法的思想,合并法遵照了分治模式,在每一层递归上都有三个步骤: 分解:将n个元素分成各含n/2个元素的子序列 解决:用合并排序对两个子序列递归地排序 合并:合并两个已排序的子序列以得到排序的结果 在对子序列排序时,其长度为1时递归结束。单个元素被视为是已排好序的。 其C语言实现如下: #include原创 2012-11-17 22:27:58 · 648 阅读 · 0 评论 -
读《算法导论》我来C语言实现(3)——堆排序和优先级队列
堆排序是一个性能很优的排序算法,一般借助数据结构——最大堆,来实现排序的效果,一般步骤为:建堆——排序,建堆和排序的过程中都夹杂着保持堆的稳定性。优先级队列也用到数据结构堆,主要C语言算法如下: #include #include //记录最大堆的长度 unsigned int heap_size = 0; //下标从0开始 //求父节点的下标 unsigned int parent(原创 2012-11-18 22:04:25 · 805 阅读 · 0 评论 -
读《算法导论》我来C语言实现(4)——快速排序
快速排序通常是用于排序的最佳的使用选择,这是因为其平均性能相当好,像合并排序一样,快速排序也是基于分治模式的,下面是快速排序的C语言实现过程: #include //将数组分为两部分,前半部分和后半部分分别小于和大于分隔的那个数 unsigned int partition(int *A, int p, int r) { int x = A[r]; int i = p - 1, j, t原创 2012-11-20 20:51:34 · 534 阅读 · 0 评论