摘要: 1、问题引入 散列表示普通数组概念的推广,,,,当实际存储的关键字数比可能的关键字总数较小时,采用散列表就会比直接数组寻址更为有效,因为散列表通常采用的数组尺寸与所要存储的关键字数成正比。散列表中主要着重解决“碰撞”问题,所谓“碰撞”就是多个关键字映射到同一个数组下标位置,这里讲采用除法散列法对关键字进行散列,对出现的冲突利用链接法进行解决。2、具体实现 具体参见:(采用链地址法处理冲突构造哈希表 http://www.cnblogs.com/lpshou/archive/2012/05/08/2490191.html)这篇文章。。。。 阅读全文
posted @ 2012-06-18 20:15 lpshou 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 1、问题引入 之前的堆排序、快速排序都是基于输入元素间的比较,这类排序叫做比较排序,对于n个元素的比较排序可以证明其在最坏情况下都要用O(nlgn)次比较来进行排序,本节中将讨论三种以线性时间运行的算法:计数排序、基数排序、桶排序,这些算法都用非比较的一些操作来确定排序顺序。2、算法讨论2.1 计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),其基本思想是:对于每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以吧x直接放到它在最终输出数组中的位置上,例如,如果有17个元素小于x,则x就属于第18个输出位置。 在计数排序中,假定输入数组是A[... 阅读全文
posted @ 2012-06-18 12:15 lpshou 阅读(1747) 评论(2) 推荐(0) 编辑
摘要: 1、算法描述 快速排序也是基于分治模式的,下面是一个典型子数组A[p..r]排序的分治过程,主要分为三个步骤: (1)分解:将数组A[p..r]划分成两个子数组A[p...q-1]和A[q+1...r],使得前一个数组中每个值都小于等于A[q],后一个数组每个值都大于A[q],下标q也在这个分解过程中求得。 (2)解决:通过递归调用对两个子数组分别进行排序。 (3)合并:两个子数组是就地进行排序的,所以他们的合并并不需要操作,这个数组已经有序了。。2、具体实现: 形参和实参的区别: (1)实现一:View Code 1 #include<stdio.h> 2 int partit. 阅读全文
posted @ 2012-06-18 09:38 lpshou 阅读(330) 评论(1) 推荐(1) 编辑