本文章为课程设计全部内容
目录(根据自己的设计更改页数)

1、 任务设计……………………………………2

2、 代码说明……………………………………3

3、 代码清单……………………………………18

4、 代码测试……………………………………18

5、 课程设计总结……………………………19

一、任务设计
1、 设计题目
题目: 数据结构排序实践

2、 课程设计目的
目的:排序时计算机程序设计中的一种重要操作,其功能时按照记录集合中每个记录的关键字之间所存在递增或递减关系,将该集合中的记录次序重新排列。
3、 基本思想
插入排序:包括直接插入排序、折半插入排序、希尔(Shell)排序。将记录集合分为有序和无序俩个序列。从无序序列中任取一个记录,然后根据该记录的关键字大小在有序序列中查找一个合适的位置,使得该记录放入这个位置后,这个有序序列仍然保持有序。每插入一个记录称为一趟插入排序,经过多趟插入排序,使得无序序列中的记录全部插入到有序序列中,则排序完成。
交换排序:包括冒泡排序、快速排序。交换排序是通过交换记录中的位置来实现排序的。俩俩比较待排序记录的关键字,一旦发现俩个记录的次序与排序要求相逆则交换这俩个记录的位置,直到表中没有逆序的记录存在为止。
选择排序:包括直接选择排序、堆排序。每一趟从待排序记录中选取关键字最小的记录,并顺序放在已排好序的记录序列的最后,直到全部记录排序完成为止。
4、 使用编译环境
软件:Visual C++ 2010 Express
5、 主要功能:
使用多种方法进行排序(从小到大)。

二、代码说明
Interposition插入排序、Binary_insert折半插入排序、Bubbing冒泡排序、Speediness快速排序、Select/选择排序、Pile堆排序、select选择、MAXSIZE记录类型数组、key关键字项、data其他数据项、RecordType记录类型、D_Insert直接插入排序函数、B_InsertSort折半插入排序函数、BubbleSort冒泡排序函数、Partition划分算法、QuickSort快速排序函数、SelectSort选择排序函数、

三、代码清单
#include<stdio.h>
#define MAXSIZE 30
typedef struct
{
int key;//关键字项
char data;//其他数据项
}RecordType;//记录类型

//插入排序
void D_Insert(RecordType R[],int n)
{ //对n个记录序列R[1]~R[n]进行直接插入排序
int i,j;
for(i=2;i<=n;i++) //进行n-1趟排序
if(R[i].key<R[i-1].key)
{//R[i].key小于R[i-].key时,需将R[i]插入到有序序列R[1]~R[i-1]中
R[0]=R[i];//设置查找监视哨R[0]并保存待插入记录R[i]值
j=i-1; //j定位于有序序列的最后一个记录R[i-1]处
while(R[j].key>R[0].key)//在有序序列中寻找R[i]的插入位置
{/将有序序列中关键字值大于R[i].key(即此刻的R[0].key)的所有Rj
由后向前顺序后移一个记录位置
/
R[j+1]=R[j];
j–;
}
R[j+1]=R[0]; //将Ri插入到有序序列中应插位置上
}
}
void Interposition()
{
int i=1,j,x;
RecordType R[MAXSIZE];//定义记录类型数组R
printf(“输入所需排序的值直至-1结束:\n”);
scanf("%d",&x);
while(x!=-1)
{
R[i].key=x;
scanf("%d",&x);
i++;
}
printf(“输出表中记录的字:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n排序\n");
D_Insert(R,i-1); //进行直接插入排序
printf(“输出直接插入排序后的结果:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n");
}

//折半插入排序
void B_InsertSort(RecordType R[],int n)
{ //对n个记录序列R[1]~R[n]进行折半插入排序
int i,j,low,high,mid;
for(i=2;i<=n;i++) //进行n-1趟排序
{
R[0]=R[i]; //设置查找监视哨R[0]并保存待插入记录的R[i]值
low=1,high=i-1;//设置初始化查找区间
while(low<=high)//寻找插入位置
{
mid=(low+high)/2;
if(R[0].key>R[mid].key)
low=mid+1;//插入位置在右半区
else
high=mid-1;//插入位置在左半区
}
for(j=i-1;j>=high;j–)
/high+1为插入位置,将R[i-1],R[i-2],…,R[high+1]顺序后移一个位置R[j+1]=R[j]/
R[high+1]=R[0];//将Ri放入应插入位置high+1
}
}
void Binary_insert()
{
int i=1,j,x;
RecordType R[MAXSIZE];//定义记录类型数组R
printf(“输入所需排序的值直至-1结束:\n”);
scanf("%d",&x);
while(x!=-1)
{
R[i].key=x;
scanf("%d",&x);
i++;
}
printf(“输出表中记录的关键字:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n排序\n");
B_InsertSort(R,i-1); //进行折半插入排序
printf("\n输出折半插入排序后的结果:\n");
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n");
}

//冒泡排序
void BubbleSort(RecordType R[],int n)
{ //对R[1]~R[n]这n个记录进行冒泡排序
int i,j,swap;
for(i=1;i<n;i++) //进行n-1趟排序
{
swap=0; //设置未发生交换标志
for(j=1;j<=n-i;j++) //R[1]~R[n-i]记录进行俩俩比较
if(R[j].key>R[j+1].key)
//如果R[j].key大于R[j+1].key,则交换R[j]和R[j+1]
{
R[0]=R[j];
R[j]=R[j+1];
R[j+1]=R[0];
swap=1;//有交换发生
}
if(swap==0)
break; //本躺比较中未出现交换,则结束排序(序已排好)
}
}
void Bubbing()
{
int i=1,j,x;
RecordType R[MAXSIZE];//定义记录类型数组R
printf(“输入你要进行排序的数字直到-1结束:\n”);
scanf("%d",&x);
while(x!=-1)
{
R[i].key=x;
scanf("%d",&x);
i++;
}
printf(“输出表中各记录的关键字:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
BubbleSort(R,i-1); //进行冒泡排序
printf("\n输出冒泡排序后的结果\n");
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n");
}

//快速排序
int Partition(RecordType R[], int i, int j)//划分算法
{ //对R[i]~R[j], 以R1为基准记录进行划分并返回划分后R[i]的正确位置
R[0]=R[i]; //暂存基准记录R[i]于R[0]
while(i<j) //从表(即序列R[i]~R[j])两端交替向中间扫描
{
while (i<j&&R[j].key>=R[0].key)
//(从右向左扫描查找第一个关键字小于R[0].key时将R[0].key的记录R[j]
j–;
if(i<j) //当i<j且R[j].key小于R[0].key时将R[j]交换到表的左端
{
R[i]=R[j];
i++;
}
while (i<j&&R[i].key<=R[0].key)
//从左到右扫描查找第一个关键字大于R[0].key的记录R[i]
i++;
if(i<j) //当i<j且R[i].key大于R[0].key时将R[i]交换到表的右端
{
R[j]=R[i];
j–;
}
}
R[i]=R[0];//将基准记录R[O]送入最终(指排好序时)应放置的位置
return i; //返回基准记录R[O]最终放置的位置
}
void QuickSort(RecordType R[], int s, int t)
{ //进行快速排序
int i;
if(s<t)
{
i=Partition(R,s,t);//i为基准记录的位置并由此将表分为R[s]~R[i - 1]和R[i + 1]~R[t]两部分
QuickSort(R,s,i-1);//对表R[s]~R[i-1]进行快速排序
QuickSort(R,i+1,t);//对表R[i+1]~R[t]进行快速排序
}
}
void Speediness()
{
int i=1,j,x;
RecordType R[MAXSIZE];//定义记录类型数组R
printf(“输入所需要排序的数据直到输入-1结束:\n”);
scanf("%d",&x);
while(x!=-1)
{
R[i].key=x;
scanf("%d",&x);
i++;
}
printf(“输出表中各记录的关键字:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
QuickSort(R,1,i-1); //进行快速排序
printf("\n输入快速排序后的结果:\n");
for (j=1;j<i;j++)
printf("%4d", R[j].key);
printf("\n");
}

//选择排序
void SelectSort(RecordType R[], int n)
{
int i,j,k;
for (i=1;i<n;i++) //进行n-1趟选择
{
k=i; //假设关键字最小的记录为第i个记录
for(j=i+1;j<=n;j++)//从第i个记录开始的n-i+1个无序记录中选出关键字最小的记录
if(R[j].key<R[k].key)
k=j; //保存最小关键字记录的存放位置
if (i!=k) //将找到的最小关键字记录与第i个记录交换
{
R[0]=R[k];
R[k]=R[i];
R[i]=R[0];
}
}
}
void Select()
{
int i=1,j,x;
RecordType R[MAXSIZE]; //定义记录类型数组R
printf(“输入需要排序的数据直到输入-1结束:\n”);
scanf("%d", &x);
while(x!=-1)
{
R[i].key = x;
scanf("%d", &x);
i++;
}
printf(“输出表中各记录的关键字:\n”);
for (j = 1; j < i; j++)
printf("%4d", R[j].key);
printf("\n排序:\n");
SelectSort(R,i-1); //进行选择排序
printf("\n输出选择排序后的结果 : \n");
for (j = 1; j < i; j++)
printf("%4d", R[j].key);
printf("\n");
}
//堆排序
void HeapAdjust(RecordType R[], int s, int t)//基于大根堆的堆排序
{ /对R[s]~R[t]除R[s]外均满足堆的定义, 即只对Rs进行调整,
使R[s]为根的完全二叉树成为一个堆
/
int i,j;
R[0]=R[s]; //R[s]暂存于R[0]
i=s;
for(j=2i;j<=t;j=2j)//沿关键字较大的孩子向下调整, 先假定为左孩子
{
if(j<t&&R[j].key<R[j+1].key)
j = j + 1;//右孩子结点的关键字大则沿右孩子向下调整
if(R[0].key>R[j].key)//即已满足堆的定义, 故不再向下调整
break;
R[i]=R[j];//将关键字大的孩子结点R[j]调整至双亲结点R[i]
i=j; //定位于孩子结点继续向下调整
}
R[i]=R[0];//找到满足堆定义的R[0](即R[s]放置位置i, 将R[s]调整于此
}
void HeapSort(RecordType R[], int n)
{ //对R[1]~R[n]这n个记录进行堆排序
int i;
for(i=n/2;i>0;i–)
//将完全二叉树非终端结点按R[n/2,R[n/2-1,…, R[1]的顺序建立初始堆
HeapAdjust(R,i,n);
for(i=n;i>1;i–) //对初始堆进行n-1趟堆排序
{
R[0] = R[1]; //堆顶的R[1]与堆底的R[i]交换
R[1] = R[i];
R[i] = R[0];
HeapAdjust(R, 1, i - 1);//将未排序的前i-1个的点重新调整为堆
}
}
void Pile()
{
int i = 1,j,x;
RecordType R[MAXSIZE]; //定义记录类型数组R
printf(“输入需要排序的数据直到结束输入-1:\n”);
scanf("%d",&x);
while(x!=-1)
{
R[i].key=x;
scanf("%d",&x);
i++;
}
printf(“输出表中各记录的关键字:\n”);
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\nSort:\n");
HeapSort(R,i-1); //进行堆排序
printf("\n输出堆排序后的结果:\n");
for(j=1;j<i;j++)
printf("%4d",R[j].key);
printf("\n");
}

int main()
{
int select; //选择
//首界面
{
printf("\n数据结构排序实践\n");
printf(" 1、插入排序\n");
printf(" 2、折半插入排序\n");
printf(" 3、冒泡排序\n");
printf(" 4、快速排序\n");
printf(" 5、选择排序\n");
printf(" 6、堆排序\n");
printf("***请选择(1-6)

C语言数据结构课程设计(可运行)相关推荐

  1. c语言 数据结构 课程设计 通讯录制作

    c语言  数据结构  课程设计  源码 infoBook.c #include "dataStruct.h" #include <stdio.h> #include & ...

  2. 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc

    数据结构课程设计_学生搭配问题 数据结构课程设计 题 目: 学生搭配问题 学 院: 班 级: 学 生 姓 名: 学 生 学 号: 指 导 教 师: 2012 年 12 月 3 日 课程设计任务书 姓名 ...

  3. c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc

    数据结构课程设计报告(模拟电梯) 山东理工大学计算机学院 课 程 设 计 (数据结构) 班 级姓 名学 号 指导教师 二〇一二年一月十日 课程设计任务书及成绩评定 课题名称电 梯 模 拟 Ⅰ.题目的目 ...

  4. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  5. 公交换乘系统c语言,数据结构课程设计报告(公交换乘).docx

    课 程 设 计 报 告 题目: 武昌地区公交查询与换乘推荐 课程名称: 数据结构课程设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 任 务 书 设计内容 掌握图.查 ...

  6. 数据结构课程设计家谱c语言,数据结构课程设计-家谱的实现与设计.doc

    数据结构课程设计-家谱的实现与设计 课 程 设 计 报 告 课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 朱强 班 级: 13软件 学 号: 20130311227 成 绩: 指 ...

  7. 【Dev-c++】C语言数据结构课程设计——基于图的航班线路设计系统

    目 录 需求分析1 概要设计2 详细设计3 调试分析9 运行结果11 参考文献12 附录13 一.需求分析 (1)输入的形式和输入值的范围: 首先构建带权的有向图,输入整数的顶点和边数.即城市的个数, ...

  8. C语言数据结构课程设计-停车场管理

    停车场管理 1.课程设计目的 2. 课程设计内容和要求 2.1问题描述: 2.2设计要求: 3.课程设计总体方案及分析 3.1问题分析 3.2 概要设计 3.3 测试结果 4. 课程设计总结 5. 附 ...

  9. 数据结构员工通讯录管理系统 C语言,数据结构课程设计报告单位员工通讯录管理系统.doc...

    班级:计科112 学号: 201100814203 姓名:冯贵阳 PAGE PAGE 42 数 据 结 构 课 程 设 计 实 验 报 告 目录 1.单位员工通讯录管理系统(线性表的应用)---- - ...

  10. 迷宫的非递归求解 C语言 数据结构课程设计

    非递归求解迷宫问题 问题解决的实现 运行环境说明: 正常数据测试 有疑问看这里 源码及课程设计报告 更新一下以往的课程设计,希望能给相同课程设计的同学提供一个不一样的思路. 问题解决的实现 问题描述: ...

最新文章

  1. linux c sql server 存储过程,SQL Server 2016 - 本机编译的函数
  2. 密码学中经典算法及应用
  3. PHP生成静态HTML的源代码及用法
  4. Java虚拟机(十二)——StringTable
  5. UVA11424 GCD - Extreme (I)【欧拉函数打表】
  6. 语言密码加密变星号_为什么汉字不能设成密码,你想过吗?
  7. MYSQL 调优和使用必读
  8. java pdfbox 提取pdf 标题_java – 使用pdfbox从PDF文件中提取文本
  9. 数学建模算法与应用学习day4——综合评价与决策方法
  10. 暗黑启示录bt版java下载,Transmission搭建BT下载服务器
  11. 谷歌开源谷歌地球企业版源码
  12. TCP offload to the resuce 让TCP减负来挽救我们
  13. git和github使用
  14. Docker系列 WordPress系列 WordPress上传或更新Markdown的最佳实践
  15. C#,图像二值化(24)——局部阈值算法的NiBlack算法及源程序
  16. NULL和NUL的区别
  17. 云计算机手机apple,云电脑IOS版怎么在苹果IOS手机上使用教程
  18. ORA-32017 ORA-16179
  19. 高数--函数--初等函数
  20. MongoDB集群和安全

热门文章

  1. DBeaver之MYSQL驱动安装
  2. 【实用数学手册(第2版)扫描版.pdf】和【免安装Matlab.7.0.绿色破解U盘便携移...】 百度网盘下载地址
  3. 使用BmFont制作unity可以使用的图集数字
  4. Debug工具的使用
  5. PCB制图 | Altium Designer 20下载与安装
  6. Docfetcher
  7. WinCC V7.4 入门笔记
  8. 加密软件VMProtect入门教程
  9. 二分排序法(折半排序)
  10. 【排序(C++实现)】:二分归并排序