数据结构课程设计(排序方法的研究).docVIP

  • 11
  • 0
  • 约4.85千字
  • 约 6页
  • 2017-05-18 发布于江西
  • 举报

数据结构课程设计(排序方法的研究).doc

数据结构课程设计(排序方法的研究)

排序方法的研究 一.设计目的 熟悉几种常用的排序方法,并从时间上作定性或定量的分析和比较,同时掌握对模块化程序的设计思想。 二.设计内容 对1000个随机数用下列几种方法进行排序。 插入排序 直接排序 折半插入 希尔排序 快速排序 起泡排序 快速排序 选择排序 简单排序 堆排序 归并排序 基数排序(选做内容) (*本报告选做了第3和4两种方法对数据进行排序*) 三.设计要求 以菜单的形式提示各排序方法,由操作者进行排序。从主菜单进入子菜单,输入选项进行排序,输出结果,进而对输出结果作出检查。程序要规格化, 四.算法及流程图 简单选择排序 通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i (1=i=n)个记录交换之。 C语言算法描述: Void SelectSort(SqListL){//对顺序表L作简单选择排序 for(i=1;IL.length;++i){//选择第i小的记录,并交换到位 j=SelectMinKey(L,i);//在L.r[i..L.length]中选择Key最小的记录 if(i!=j) L.r[i]←→L.r[j]//与第个记录交换 }}//SelectSort 堆排序 C语言算法描述: Typedef SqList HeapType; //堆采用顺序表存储表示 Void HeapAdjust(HeapType H,int S,int m){ //已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义//本函数调整 // H.r[s]的关键字,使H.r[s..m]成为一个大顶堆//(对其中记录的关键字而言) rc=H.r[s]; For(j=2*s;I=m;j*=2){ //沿key较大的孩子结点向筛选 If(jmLT(H.r[j].key,H.r[j+1].key))++j;//为key较大的记录的下标 if(!LT(rc.key,H.r[j].key)) break;//rc应插入在位置s上 H.r[s]=H.r[j];s=j; } H.r[s]=rc; }//HeapAdjust void HeapSort(HeapType H){//对顺序表进行排序 for(I=H.length/2;i0;--i) //把H.r[1..H.length]建成大顶堆 HeapAdjust(H,I,H.length); For(I=H.length;I1;--i){ H.r[1]H.r[i];//将堆顶记录和当前未经排序子序列H.r[1..j]中 //最后一个记录相互交换 HeapAdjust(H,1,I-1); //将H.r[1..j]重新调整为大顶堆 }}//HeapSort 归并排序 C语言算法描述: Void Merge(RcdType SR[],RcType TR[],int I,int m,int n){ //将有序的SR[i..m]和SR[m+1.. n]归并为有序的TR[i.. n] for(j=m+1,k=i;I=mj=n;++k){//将SR中记录由小到大的顺序并入TR if LQ(SR[i].key,SR[j].key) TR[k]=SR[I++]; else TR[k]=SR[j++]; } if(i=m) TR[k.. n]=SR[i.. m];//将剩余的SR[j.. m]复制到TR if(j=n) TR[k.. n]=SR[i.. n];// 将剩余的SR[j.. n] 复制到TR }//Merge void Msort (RecType SR[],RcdType TR1[],int s,int t) {//将SR[S..t]归并排序为TR1[S.. t] if(S==t) TR1[S]=SR[s]; else {m=(s+t)/2;//将SR[s.. t]平分为SR[s.. m]和SR[m+1..t] Msort(SR,TR2,s,m);//递归地将SR[s..M] 归并为有序的TR2[s.. m] Msort(SR,TR2,m+1,t);//递归地将SR[m+1.. t] 归并为有序的TR2[m+1.. t] Merge(TR2,TR!,s,m,t);//将TR2[s.. m]和TR2[m+1..T]归并到TR1[s.. t] }}//MSort void MergeSort (SqList L) {//对顺序表L作归并排序 Msort(L.r,L.r,L.length); }//MergeSort 五.流程图和输入数据及输出结果 (以下四幅图为:主菜单和选择排序的子菜单;简单选择排序运行结果;堆排序运行结果;主菜单和归并排序运行结果) (由于摘图需要,本报告将1000个随机数换为10个,便于查看) 六.程序清单 #i

文档评论(0)

1亿VIP精品文档

相关文档