2013年10月26日

【各种排序系列之】希尔排序法

摘要: 基本思想:先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。优点:让关键字值小的元素能很快前移,且序列若基本有序时,再用直接插入排序处理,时间效率会高很多。技巧:子序列的构成不是简单地“逐段分割”,而是将相隔某个增量dk的记录组成一个子序列,让增量dk逐趟缩短(例如依次取5,3,1),直到dk=1为止。空间效率:void ShellSort(SqList &L,int dlta[ ],int t){//按增量序列dlta[0…t-1]对顺序表L作Shell排序。dk值依次装在dlta[t]中 for(k=0; 阅读全文

posted @ 2013-10-26 22:06 Allen Blue 阅读(320) 评论(0) 推荐(0) 编辑

【各种排序系列之】插入排序法

摘要: 算法思想:在已形成的有序表中线性查找,并在适当位置插入,把原来位置上的元素向后顺移。//基于指针的插入排序/*假设有人想排序“eagle”,“cat”,“ant”,“dog”,“ball”这些字符串。使用基于指针的存储,即一个数组包含了指向实际信息的指针,而不是直接将信息存储在数组元素的存储空间里面。使用这种方式,可以灵活地存储和排序任意复杂结构的数据。*/void sortPointers(void **ar, int n, int(*cmp)(const void *, const void *))//对一个数组ar进行排序,并且其中的元素可以用提供的比较函数cmp进行比较{ int... 阅读全文

posted @ 2013-10-26 20:42 Allen Blue 阅读(121) 评论(0) 推荐(0) 编辑

【查找】二分查找法

摘要: 先给数据排序(例如按升序排好),形成有序表。然后再将key与正中元素相比,若key小,则缩小至右半部内查找;再取其中值比较,每次缩小1/2的范围,直到查找成功或失败为止。问题:若关键字不在表中,怎样得知并及时停止查找?典型标志是:当查找范围的上界≤下界时停止查找。二分查找的时间效率是logN。 1 int search_bin(char *t,char k) 2 { 3 int low=1,high=10,mid; 4 while (low<=high) 5 { 6 mid=(low+high)/2; 7 if (k==t[mid]) r... 阅读全文

posted @ 2013-10-26 20:09 Allen Blue 阅读(162) 评论(0) 推荐(1) 编辑

导航