第章查找和排序技术修改.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章查找和排序技术修改

qksort1(p,m,n) int m,n; ET p[]; { int i; if (n>m) /*子表不空*/ {i=split(p,m,n); /*分割*/ qksort1(p,m,i-1);/*对前子表进行快速排序*/ qksort1(p,i+1,n);/*对后子表进行快速排序*/ } return; } 快速排序----算法描述 int split(p,m,n) /*返回分界线位置*/ int m,n; ET p[]; { int i,j,k,u;ET t; i=m; j=n; k=(i+j)/2; if ((p[i]>=p[j])(p[j]>=p[k])) u=j; /*选取一个元素*/ else if ((p[i]>=p[k])(p[k]>=p[j])) u=k; else u=i; t=p[u]; p[u]=p[i]; while (i!=j) { while ((i<j)(p[j]>=t)) j=j-1; if (i<j) { p[i]=p[j]; i=i+1;} while ((i<j)(p[i]<=t)) i=i+1; if (i<j) { p[j]=p[i]; j=j-1;} } p[i]=t; return(i); } 快速排序----算法描述 程序演示 教材刊误 3.2.2 简单插入排序与希尔排序---插入类排序 1. 简单插入排序 所谓插入排序,是将无序序列中的各元素依次插入到已经有序的线性表中。 在线性表中,只包含第1个元素的子表可以看成有序表 从线性表的第2个元素开始直到最后一个元素,逐次将其中的每一个元素插入到前面已经有序的子表中。 假设线性表中前j-1个元素已经有序,现在要将线性表中的第j个元素插入到前面的有序子表中,插入过程如下: 1 1 3 5 7 6 9 ↑j=6 5 1 7 3 1 6 9 ↑j=2 1 5 7 3 1 6 9 ↑j 1 5 7 3 1 6 9 ↑j 1 3 5 7 1 6 9 ↑j 1 1 3 5 6 7 9 ↑j=7 =3 =4 =5 PROCEDURE INSORT(P,n) FOR j=2 TO n DO { T=P(j);k=j-1 WHILE (k>0)and(P(k)>T) DO { P(k+1)=P(k);k=k+1 } P(k+1)=T } RETURN 输入:待排序序列P(1:n)。 输出:有序序列P(1:n)。 简单插入排序----算法描述 insort(p,n) int n; ET p[]; { int j,k; ET t; for (j=1; j<n; j++) { t=p[j]; k=j-1; while ((k>=0)(p[k]>t)) { p[k+1]=p[k]; k=k-1; } p[k+1]=t; } return; } 程序演示 简单插入排序----算法描述 希尔排序----思路: 将整个无序序列分割成若干小子序列分别进行插入排序子序列的分割方法如下: 将相隔某个增量h的元素构成一个子序列。在排序过程中,逐次减小这个增量,最后当h减到1时,进行一次插入排序,排序就完成。 增量序列一般取 ht=n/2k(k=1,2,…,[log2n]), 其中n为待排序序列的长度。 2. 希尔排序 输入:待排序序列P(1:n)。 输出:有序序列P(1:n)。 PROCEDURE SHLSORT(P,n) h=n/2 WHILE (h>0) DO { FOR j=h+1 TO n DO { t=P(j); i=j-h WHILE (i>0)and(P(i)>t) DO { P(i+h)=P(i); i=i-h} P(i+h)=t } h=h/2 } RETURN 希尔排序----算法描述 shlso

文档评论(0)

woai118doc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档