数据结构教学课件作者李学刚电子课件源代码单元6排序幻灯片.ppt

数据结构教学课件作者李学刚电子课件源代码单元6排序幻灯片.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
void ShellPass(SeqList R,int d) {//希尔排序中的一趟排序,d为当前增量 int i,j; for(i=d+1;i=n;i++) { cm[4][0]++;//统计比较次数 if(R[i].keyR[i-d].key) { R[0]=R[i];j=i-d; cm[4][1]++;//统计基本赋值操作次数 do {//查找R[i]的插入位置 R[j+d]=R[j];//后移记录 cm[4][0]++;//统计比较次数 cm[4][1]++;//统计基本赋值操作次数 cm[4][3]++;//统计移动次数 j=j-d; }while(j0R[0].keyR[j].key); R[j+d]=R[0]; cm[4][1]++;//统计基本赋值操作次数 } } } void Heapify(SeqList R,int low,int high) {//将R[low...high]调整为大根堆 int large; RecType temp=R[low]; cm[5][1]++; //统计基本赋值操作次数 for(large=2*low;large=high;large*=2) { cm[5][0]++; //统计比较次数 if(largehighR[large].keyR[large+1].key) large++; cm[5][0]++; //统计比较次数 if(temp.key=R[large].key) break; R[low]=R[large];//相当于交换了R[low]和R[large] cm[5][1]++;//统计基本赋值操作次数 low=large; } R[low]=temp; cm[5][1]++;//统计基本赋值操作次数 cm[5][2]++;//统计交换次数 } void BuildHeap(SeqList R) {//将初始文件R[1...n]构造成大根堆 int i; for(i=n/2;i0;i--) Heapify(R,i,n); } void HeapSort(SeqList R) { //对R[1...n]进行堆排序,用R[0]做暂存单元 int i; BuildHeap(R); for(i=n;i1;i--) { //对当前无序区R[1...i]进行堆排序,共做n-1趟 R[0]=R[1]; //将堆顶和堆中最后一个记录交换 R[1]=R[i]; R[i]=R[0]; cm[5][1]+=3; //统计基本赋值操作次数 cm[5][2]++; //统计交换次数 Heapify(R,1,i-1); } } void analyse() {//给出各种指标的比较结果 int i; char *name[6]={冒泡排序,插入排序,选择排序,快速排序,希尔排序,堆排序}; printf(\n这六种排序算法的指标分别为:\n); printf(\n比较次数为:\n); for(i=0;i6;i++) printf(%-8s:%d\n,name[i],cm[i][0]); printf(\n基本赋值操作次数为:\n); for(i=0;i6;i++) printf(%-8s:%d\n,name[i],cm[i][1]); printf(\n交换次数为:\n); for(i=0;i6;i++) printf(%-8s:%d\n,name[i],cm[i][2]); printf(\n移动次数为:\n); for(i=0;i6;i++) printf(%-8s:%d\n,name[i],cm[i][3]); getchar(); } void print() {//输出R数组中的数据 int i; printf(the data is\n); for(i=1;i=n;i++) printf(%4d,R[i]); } void copyto(SeqList R1, SeqList R2) {//将R1数组中的数据备份到R2数组中 int i; for(i=1;i=n;i++) R2[i]=R1[i]; } void ascending() {//产生升序初始数据 int i; for(i=1;i=n;i++) R[i].key=i; } void descending() {//产生降序初始数据 int i; for(i=1;i=n;i++) R[i].key=n-i+1; } v

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档