欢迎大家光临【无师自通-教程网】您的到来是我们的荣幸。本站提供photoshop教程,ps教程,flash教程,cad教程,网页制作教程,excel教程,asp教程,vb教程,3d教程,c语言教程,html教程,coreldraw教程,dreamweaver教程,java教程,3dmax教程 等各种教程为主题的内容和服务,相信您会在这里找到您所需要的东东。无师自通伴您一生-谢谢您的光临!!
网站地图 设为首页
简繁切换 加入收藏
栏目待定 留言本站
您现在的位置: 无师自通-教程网 >> 程序设计 >> 数据库教程 >> 数据结构 >> 教程正文

  没有公告

教程: 数据结构教程第三十七课实验八排序实验 更多...
教程: 数据结构教程第三十七课实验八排序实验

教学目的: 掌握简单插入排序、快速排序、堆排序的算法并加以应用。

教学重点:

教学难点:

授课内容:

实现下述三种算法,并用以下无序序列加以验证:

49,38,65,97,76,13,27,49

一、简单插入排序

二、快速排序

三、堆排序

以上算法的C源程序。

#define MAXSIZE 20 #define LT(a,b) ((a)<(b)) typedef int KeyType; typedef int InfoType; typedef struct{ KeyType key; InfoType otherinfo; }RedType; typedef struct{ RedType r[MAXSIZE 1]; int length; }SqList; void InsertSort(SqList *L) { int i,j; for(i=2;i<=L->length; i) if(LT(L->r[i].key,L->r[i-1].key)){ L->r[0]=L->r[i]; for(j=i-1; LT(L->r[0].key,L->r[j].key); --j) L->r[j 1]=L->r[j]; L->r[j 1]=L->r[0]; } } void BInsertSort(SqList *L) { int i,j; int low,high,m; for(i=2;i<=L->length; i){ L->r[0]=L->r[i]; low=1;high=i-1; while(low<=high){ m=(low high)/2; if (LT(L->r[0].key,L->r[m].key)) high=m-1; else low=m 1; } for(j=i-1;j>=high 1;--j) L->r[j 1]=L->r[j]; L->r[high 1]=L->r[0]; } } /* QuickSort related function */ int Partition(SqList *L,int low,int high) { int pivotkey; L->r[0]=L->r[low]; pivotkey=L->r[low].key; while(low<high){ while(low<high&&L->r[high].key>=pivotkey) --high; L->r[low]=L->r[high]; while(low<high&&L->r[low].key<=pivotkey) low; L->r[high]=L->r[low]; } L->r[low]=L->r[0]; return low; } void QSort(SqList *L,int low,int high) { int pivotloc; if(low<high){ pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc 1,high); } } void QuickSort(SqList *L) { QSort(L,1,L->length); } /* End QuickSort related function*/ /*SelectSort related function */ int SelectMinKey(SqList L,int i) { int k; int j; k=i; for(j=i;j<L.length 1;j ) if(L.r[k].key>L.r[j].key) k=j; return k; } void SelectSort(SqList *L) { RedType t; int i,j; for(i=1;i<L->length; i){ j=SelectMinKey(*L,i); if(i!=j) { t=L->r[i]; L->r[i]=L->r[j]; L->r[j]=t; } } } /*End SelectSort related function */ typedef SqList HeapType; void HeapAdjust(HeapType *H,int s,int m) { RedType rc; int j; rc=H->r[s]; for(j=2*s;j<=m;j*=2){ if(j<m&&LT(H->r[j].key,H->r[j 1].key)) j; if(!LT(rc.key,H->r[j].key)) break; H->r[s]=H->r[j]; s=j; } H->r[s]=rc; } void HeapSort(HeapType *H) { RedType t; int i; for(i=H->length/2;i>0;--i) HeapAdjust(H,i,H->length); for(i=H->length;i>1;--i){ t=H->r[1]; H->r[1]=H->r[i]; H->r[i]=t; HeapAdjust(H,1,i-1); } } main() { int a[]={49,38,65,97,76,13,27,49}; int i,k; SqList s; printf("\nThe record to be sort:\n"); for(i=1;i<9;i ) { s.r[i].key=a[i-1]; printf("%d ",a[i-1]); } s.length=i-1; printf("\n\t1,InsertSort\n\t2,BInsertSort\n\t3,QuickSort\n\t4,SelectSort\n"); printf("\t5,HeapSort\n\tPress 1..5 to select a function\n"); scanf("%d",&k); switch(k){ case 1: InsertSort(&s); break; case 2: BInsertSort(&s); break; case 3: QuickSort(&s); break; case 4: SelectSort(&s); break; case 5: HeapSort(&s); break; default:printf("No function which you select.\n"); } printf("\nThe records be sorted:\n"); for(i=1;i<9;i ) printf("%d ",s.r[i].key); printf("\n\n\tPress any key to exit.\n"); getch(); }


教程录入:admin    责任编辑:admin 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
     
     
     

    access基础知识
    免责声明!本站资料大部分来自于互联网,其版权归原作者或其他合法者所有.如内容涉及或侵犯了您的权益,请通知本人,我将尽快处理!.欢迎您的光临。
    辽ICP备07003958号
    无师自通,伴你一生-教程网