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

  • 10
  • 0
  • 约2.96万字
  • 约 72页
  • 2016-12-26 发布于广东
  • 举报

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

void QuickSort(SeqList R,int low,int high) {//对R[low…high]快速排序 int pivot; if(lowhigh) { pivot=Partition(R,low,high); QuickSort(R,low,pivot-1); QuickSort(R,pivot+1,high); } } 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

文档评论(0)

1亿VIP精品文档

相关文档