• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > 数据结构教程 第三十七课 实验八 排序实验

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了数据结构教程,数据结构教程李春葆,数据结构视频教程,数据结构教程第四版,c语言数据结构教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

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

教学重点:

教学难点:

授课内容:

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

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&<(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();
}
</div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 数据结构教程
  • 数据结构教程 第十课 栈的表示与实现
  • 数据结构教程 第九课 循环链表与双向链表
  • 数据结构教程 第八课 线性表的链式表示与实现
  • 数据结构教程 第七课 实验一 线性表的顺序存储实验
  • 数据结构教程 第六课 线性表的顺序表示和实现
  • 数据结构教程 第五课 线性表的类型定义
  • 数据结构教程 第三十五课 实验七 查找
  • 数据结构教程 第三十四课 插入排序、快速排序
  • 数据结构教程 第三十三课 哈希表(二)

相关文章

  • 2017-06-28数据结构教程 第四十课 总复习
  • 2017-06-28链表的c语言实现(二)
  • 2017-06-28数据结构教程 第三十七课 实验八 排序实验
  • 2017-06-28数据结构教程 第三十八课 文件概念、顺序文件
  • 2017-06-28数据结构教程 第十课 栈的表示与实现
  • 2017-06-28java中实现希尔排序算法
  • 2017-08-17做幻方
  • 2017-06-28VFP中产生随机数并实现起泡排序
  • 2017-06-28数据结构教程 第二十四课 遍历二叉树
  • 2017-06-28数据结构教程 第三十一课 动态查找表

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 数据结构教程 第十二课 实验二 循环链表实验
    • 数据结构C语言实现之二叉树
    • VFP中实现选择排序
    • 数据库理论:学习基于SQL数据库的算法
    • 数据结构教程 第二十五课 单元测验
    • 模拟退火算法求解TSP问题
    • 数据结构教程 第三十三课 哈希表(二)
    • 面向对象编程(OOP)理解
    • 苹果(01背包)
    • 数据结构教程 第三十五课 实验七 查找

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有