文档库 最新最全的文档下载
当前位置:文档库 › 排序综合课程设计

排序综合课程设计

排序综合课程设计
排序综合课程设计

2012-2013学年第二学期《计算机算法设计》

课程设计报告

题目:排序综合

专业:计算机科学与技术

班级:09(2)班

姓名:王春桃

指导教师:江涛

成绩:

计算机与信息工程系

2013年6月27日

目录

1设计内容及要求 (1)

1.1 设计内容 (1)

1.2设计任务及具体要求 (1)

2 算法原理 (1)

2.1系统的功能简介 (1)

2.2 总体程序框图 (1)

3 算法设计 (2)

3.1各个模块的程序流程图 (2)

3.2 算法的入口参数及说明 (3)

3.3 功能设计 (4)

4 算法分析 (4)

4.1程序的主要结构 (4)

4.2代码分析 (5)

4.3结果分析 (13)

5 运行结果 (13)

5.1 主菜单显示模块: (14)

5.2 测试模块 (14)

5.3结果模块 (15)

6 参考文献 (15)

1设计内容及要求

1.1 设计内容

利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。

1.2设计任务及具体要求

1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。

2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。

(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

2 算法原理

2.1系统的功能简介

分析设计课题的要求,要求编程实现以下功能:

(1)显示随机数:调用Dip()函数输出数组a[]。数组a[]中保存有随机产生的随机数。(2)直接选择排序:通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之。

(3)冒泡排序:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

(4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

(5)直接插入排序:将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。设整个排序有n个数,则进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序列为止。

(6)显示各排序算法排序后的的数据和时间效率,并比较找出其中2种较快的方法。

2.2 总体程序框图

排序方式:直接选择排序、冒泡排序、希尔排序、直接插入排序显示排序后的的数据和时间效率。

3 算法设计

3.1各个模块的程序流程图

数据结构:

typedef struct

{

KeyType key;

InfoType otherinfo;

}RedType;

typedef struct

{

RedType r[MAXSIZE+1];

int length;

}SqList;

3.2 算法的入口参数及说明

#include

#define MAXSIZE 20

#define LT(a,b) ((a)<(b)) //宏定义

typedef int KeyType; //定义关键字KeyType为int typedef int InfoType; //定义关键字InfoType为int typedef struct{ //RedType结构定义

KeyType key;

InfoType otherinfo; //记录中其他信息域的类型

}RedType;

typedef struct{ //SqList结构定义

RedType r[MAXSIZE+1]; //定义大小

int length; //length为待排记录个数

}SqList;

3.3 功能设计

1)主控菜单设计

为实现排序的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

程序运行后,给出11个菜单项的内容和输入提示,如下:

欢迎来到排序综合系统!

菜单

(1)---直接插入排序

(2)---直接选择排序

(3)---冒泡排序

(4)---快速排序

(5)---堆排序

(6)---时间效率比较

(7)---显示随机数

(0)---退出系统

请在上述序号中选择一个并输入:

2)程序模块结构

由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数):

●主控菜单项选择函数menu_select()

●插入排序函数:InsertSort()

●选择排序函数:SelectSort()

●冒泡排序函数:BubbleSort()

●堆排序函数:heapsort()

4算法分析

4.1程序的主要结构

函数调用关系如下图所示。

其中main()是主函数,它进行菜单驱动,根据选择项1~0调用相应的函数。

4.2代码分析

#include

#include

#include

#include

#include

#define N 30000

void Wrong()

{

printf("\n=====>按键错误!\n");

getchar();

}

void Disp(int a[])

{

int i;

system("cls");

for(i=0;i

{

if((i-1)%10==9)

printf("\n");

printf("%-7d",a[i]);

}

}

void InsertSort(int a[],int p) //插入排序

{

int i,j,temp;

for(i=1;i

temp=a[i];

for(j=i;j>0&&a[j-1]>temp;j--)

a[j]=a[j-1];

a[j]=temp;

}

}

void SelectSort(int a[],int p) //选择排序

{

int i,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(k!=i)

{

int temp;

temp=a[k];

a[k]=a[i];

a[i]=temp;

}

}

}

void BubbleSort(int a[],int p) /*冒泡排序算法*/

{

int i,j,temp;

for (i=0;i

{

for (j=N-1;j>i;j--) /*比较,找出本趟最小关键字的记录*/ if (a[j]

{

temp=a[j]; /*进行交换,将最小关键字记录前移*/

a[j]=a[j-1];

a[j-1]=temp;

}

}

void creatheap(int a[],int i,int n) //创建堆{

int j;

int t;

t=a[i];

j=2*(i+1)-1;

while(j<=n)

{

if((j

j++;

if(t

{

a[i]=a[j];

i=j;

j=2*(i+1)-1;

}

else

j=n+1;

}

a[i]=t;

}

void heapsort(int a[],int n,int p) //堆排序{

int i;

int t;

for(i=n/2-1;i>=0;i--)

creatheap(a,i,n-1);

for(i=n-1;i>=1;i--)

{

t=a[0];

a[0]=a[i];

a[i]=t;

creatheap(a,0,i-1);}

}

void quicksort(int a[],int n,int p)

{

int i,j,low,high,temp,top=-1;

struct node

{

int low,high;

}st[N];

top++;

st[top].low=0;st[top].high=n-1;

while(top>-1)

{ low=st[top].low;high=st[top].high;

top--;

i=low;j=high;

if(low

{ temp=a[low];

while(i!=j)

{ while(itemp)j--;

if(i

while(i

if(i

}

a[i]=temp;

top++;st[top].low=low;st[top].high=i-1;

top++;st[top].low=i+1;st[top].high=high;

}

}

}

double TInsertSort(int a[],int p)

{

int i;

int b[N];

for(i=0;i

b[i]=a[i];

LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_liPerfFreq);

LARGE_INTEGER m_liPerfStart={0};

QueryPerformanceCounter(&m_liPerfStart);

InsertSort(b,p);

LARGE_INTEGER liPerfNow={0};

QueryPerformanceCounter(&liPerfNow);

double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart;

time/=m_liPerfFreq.QuadPart;

if(p!=6)

{Disp(b);getchar();}

printf("\n用直接插入排序法用的时间为%f秒;",time);

FILE *fp;

fp=fopen("直接插入排序.txt","w");

for(i=0;i

fprintf(fp,"%d ",b[i]);

fclose(fp);

return(time);

}

double TSelectSort(int a[],int p)

{

int i;

int b[N];

for(i=0;i

b[i]=a[i];

LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_liPerfFreq);

LARGE_INTEGER m_liPerfStart={0};

QueryPerformanceCounter(&m_liPerfStart);

SelectSort(b,p);

if(p!=6)

{Disp(b);getchar();}

LARGE_INTEGER liPerfNow={0};

QueryPerformanceCounter(&liPerfNow);

double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart;

printf("\n用直接选择排序法用的时间为%f秒;",time);

FILE *fp;

fp=fopen("直接选择排序.txt","w");

for(i=0;i

fprintf(fp,"%d ",b[i]);

fclose(fp);return(time);

}

double TBubbleSort(int a[],int p)

{

int i;

int b[N];

for(i=0;i

b[i]=a[i];

LARGE_INTEGER m_liPerfFreq={0};

QueryPerformanceFrequency(&m_liPerfFreq);

LARGE_INTEGER m_liPerfStart={0};

QueryPerformanceCounter(&m_liPerfStart);

BubbleSort(b,p);

LARGE_INTEGER liPerfNow={0};

QueryPerformanceCounter(&liPerfNow);

double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart;

if(p!=6)

{Disp(b);getchar();}

printf("\n用冒泡排序法用的时间为%f秒;",time);

FILE *fp;

fp=fopen("冒泡排序.txt","w");

for(i=0;i

fprintf(fp,"%d ",b[i]);

fclose(fp);return(time);

}

double Theapsort(int a[],int n,int p)

{

int i;

int b[N];

for(i=0;i

b[i]=a[i];

LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_liPerfFreq);

LARGE_INTEGER m_liPerfStart={0};

QueryPerformanceCounter(&m_liPerfStart);

heapsort(b,N,p);

LARGE_INTEGER liPerfNow={0};

QueryPerformanceCounter(&liPerfNow);

double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart;

if(p!=6)

{Disp(b);getchar();}

printf("\n用堆排序法用的时间为%f秒;",time);

FILE *fp;

fp=fopen("堆排序.txt","w");

for(i=0;i

fprintf(fp,"%d ",b[i]);

fclose(fp);return(time);

double Tquicksort(int a[],int n,int p)

{

int i;

int b[N];

for(i=0;i

b[i]=a[i];

LARGE_INTEGER m_liPerfFreq={0}; QueryPerformanceFrequency(&m_liPerfFreq);

LARGE_INTEGER m_liPerfStart={0};

QueryPerformanceCounter(&m_liPerfStart);

quicksort(b,N,p);

LARGE_INTEGER liPerfNow={0};

QueryPerformanceCounter(&liPerfNow);

double time=liPerfNow.QuadPart - m_liPerfStart.QuadPart; time/=m_liPerfFreq.QuadPart;

if(p!=6)

{Disp(b);getchar(); }

printf("\n用快速排序法用的时间为%f秒;",time);

FILE *fp;fp=fopen("快速排序.txt","w");

for(i=0;i

fprintf(fp,"%d ",b[i]);

fclose(fp); return(time);

}

void BubleSort(double a[]) //时间数组的冒泡排序

{

int i,j;

double temp;

for(i=1;i<6;i++)

{

for(j=4;j>=i;j--)

if(a[j+1]

{

temp=a[j+1];

a[j+1]=a[j];

a[j]=temp;

}

}

void menu()

{

printf(" 欢迎来到排序综合系统! \n"); printf(" ============================================== \n"); printf(" \n"); printf(" 菜单 \n"); printf(" \n"); printf(" \n"); printf(" (1)---直接插入排序 \n"); printf(" (2)---直接选择排序 \n"); printf(" (3)---冒泡排序 \n"); printf(" (4)---快速排序 \n"); printf(" (5)---堆排序 \n"); printf(" (6)---时间效率比较 \n"); printf(" (7)---显示随机数 \n"); printf(" (0)---退出系统 \n"); printf("\n 请在上述序号中选择一个并输入: "); }

void main()

{

int i,p,a[N];

srand((int)time(NULL)); /*随机种子*/

for(i=0;i

a[i]=rand()%50000+1;

while(1)

{

system("cls");

menu();

scanf("%d",&p);

if(p==0)

{

printf("===>谢谢使用!\n");

getchar();

break;

}

double TIMES[5],TIMES1[5];//时间数组

switch(p)

{

case 1:TInsertSort(a,p);printf("\n请按任意键继续...");getchar();break; case 2:TSelectSort(a,p);printf("\n请按任意键继续...");getchar();break;

case 3:TBubbleSort(a,p);printf("\n请按任意键继续...");getchar();break;

case 4:Tquicksort(a,N,p);printf("\n请按任意键继续...");getchar();break;

case 5:Theapsort(a,N,p);printf("\n请按任意键继续...");getchar();break;

case 6:system("cls");

TIMES1[1]=TIMES[1]=TInsertSort(a,p);TIMES1[2]=TIMES[2]=TSelectSort(a,p);

TIMES1[3]=TIMES[3]=TBubbleSort(a,p);TIMES1[4]=TIMES[4]=Tquicksort(a,N,p);TIMES1

[5]=TIMES[5]=Theapsort(a,N,p);getchar();

BubleSort(TIMES);

printf("\n\n");

{

printf("排序这组数据两种较快的排序法分别是:\n");

if(TIMES[1]==TIMES1[1]) printf("直接插入排序:%f秒!\n",TIMES[1]);

if(TIMES[1]==TIMES1[2]) printf("直接选择排序:%f秒!\n",TIMES[1]);

if(TIMES[1]==TIMES1[3]) printf("冒泡排序:%f秒!\n",TIMES[1]);

if(TIMES[1]==TIMES1[4]) printf("快速排序:%f秒!\n",TIMES[1]);

if(TIMES[1]==TIMES1[5]) printf("堆排序:%f秒!\n",TIMES[1]);

if(TIMES[1]!=TIMES[2])

{

if(TIMES[2]==TIMES1[1]) printf("直接插入排序:%f秒!\n",TIMES[2]);

if(TIMES[2]==TIMES1[2]) printf("直接选择排序%f秒!\n",TIMES[2]);

if(TIMES[2]==TIMES1[3]) printf("冒泡排序%f秒!\n",TIMES[2]);

if(TIMES[2]==TIMES1[4]) printf("快速排序%f秒!\n",TIMES[2]);

if(TIMES[2]==TIMES1[5]) printf("堆排序%f秒!\n",TIMES[2]);

}

} printf("\n请按任意键继续...");srand((int)time(NULL));

for(i=0;i

case 7:Disp(a);FILE *fp;fp=fopen("随机数.txt","w");

for(i=0;i

任意键继续...");getchar();break;

default:Wrong();printf("\n请按任意键继续...");getchar();break;

}

}

}

4.3结果分析

快速排序所用时间为0.006198秒,为最快。其次是堆排序法为0.008836秒,剩下依次为直

接选择排序法,时间为2.653618秒,直接插入排序法2.727632秒,冒泡排序法5.304505

秒。

5 运行结果

5.1 主菜单显示模块:

5.2 测试模块

5.3结果模块

6 参考文献

严蔚敏,吴伟民,《数据结构》,北京:清华大学出版社,2006

严蔚敏,吴伟民,米宁,《数据结构题集》。北京:清华大学出版社,2006

数据结构课程设计-排序

一、问题描述 1、排序问题描述 排序是计算机程序设计的一种重要操作,他的功能是将一组任意顺序数据元素(记录),根据某一个(或几个)关键字按一定的顺序重新排列成为有序的序列。简单地说,就是将一组“无序”的记录序列调整为“有序”的记录序列的一种操作。 本次课程设计主要涉及几种常用的排序方法,分析了排序的实质,排序的应用,排序的分类,同时进行各排序方法的效率比较,包括比较次数和交换次数。我们利用java语言来实现本排序综合系统,该系统包含了:插入排序、交换排序、选择排序、归并排序。其中包括: (1)插入排序的有关算法:不带监视哨的直接插入排序的实现; (2)交换排序有关算法:冒泡排序、快速排序的实现; (3)选择排序的有关算法:直接选择排序、堆排序的实现; (4)归并排序的有关算法:2-路归并排序的实现。 2、界面设计模块问题描述 设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。 二、问题分析 本人设计的是交换排序,它的基本思想是两两比较带排序记录的关键字,若两个记录的次序相反则交换这两个记录,直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有冒泡排序和快速排序。 冒泡排序的基本思想是:将待排序的数组看作从上到下排列,把关键字值较小的记录看作“较轻的”,关键字值较大的纪录看作“较重的”,较小关键字值的记录好像水中的气泡一样,向上浮;较大关键字值的纪录如水中的石块向下沉,当所有的气泡都浮到了相应的位置,并且所有的石块都沉到了水中,排序就结束了。 冒泡排序的步骤: 1)置初值i=1; 2)在无序序列{r[0],r[1],…,r[n-i]}中,从头至尾依次比较相邻的两个记录r[j] 与r[j+1](0<=j<=n-i-1),若r[j].key>r[j+1].key,则交换位置; 3)i=i+1; 4)重复步骤2)和3),直到步骤2)中未发生记录交换或i=n-1为止; 要实现上述步骤,需要引入一个布尔变量flag,用来标记相邻记录是否发生交换。 快速排序的基本思想是:通过一趟排序将要排序的记录分割成独立的两个部分,其中一部分的所有记录的关键字值都比另外一部分的所有记录关键字值小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个记录序列变成有序。 快速排序步骤: 1)设置两个变量i、j,初值分别为low和high,分别表示待排序序列的起始下

数据结构课程设计

1.一元稀疏多项式计算器 [问题描述] 设计一个一元稀疏多项式简单计算器。 [基本要求] 输入并建立多项式; 输出多项式,输出形式为整数序列:n, c1, e1, c2, e2,……, cn, en ,其中n是多项式的项数,ci, ei分别是第i项的系数和指数,序列按指数降序排序; 多项式a和b相加,建立多项式a+b; 多项式a和b相减,建立多项式a-b; [测试数据] (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1) (x+x3)+(-x-x3)=0 (x+x2+x3)+0=(x3+x2+x) [实现提示] 用带头结点的单链表存储多项式,多项式的项数存放在头结点中。 2.背包问题的求解 [问题描述] 假设有一个能装入总体积为T的背包和n件体积分别为w1, w2, …,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积为{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2) [实现提示] 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品转入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”因此自然要用到栈。 3.完全二叉树判断 用一个二叉链表存储的二叉树,判断其是否是完全二叉树。 4.最小生成树求解(1人) 任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。 5.最小生成树求解(1人) 任意创建一个图,利用普里姆算法,求出该图的最小生成树。 6.树状显示二叉树 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出;

综合课程设计

可用C++(Visual C++ 6.0),JA V A(JSP,STRUTS),C#(https://www.wendangku.net/doc/7a17062459.html, ,Visual Studio 2005),试题目而定。 1、综合购物频道(限最多3人选) 项目描述:是一个在线销售系统,是一个B-C模式的电子商务系统,由前台的B/S模式购物系统和后台的C/S模式的管理系统两部分组成。该电子商务系统可以实现会员注册、浏览商品、查看商品详细信息、选购商品、取消订单和查看订单等功能,前台系统的详细功能。目的:了解项目开发的一个基本流程以及如何运用现行的框架搭建一个大型的综合型系统2、某大型企业内部OA(限最多3人选) 项目描述:采用网络办公自动化系统,不仅能快速提高企业的运作效率,节省大量的办公费用,能全面提升企业的核心竞争力和生产力以及提高工作效率。该企业内部OA系统采用模型组件与WEB技术结合的方式,具有强大的功能,广泛的适用性、可靠安全性和可扩展性。目的:学习运用当前热门的前台技术。 3、产品展示厅(限最多3人选) 项目描述: 在互联网发达的今天,当您想客户宣传自己的产品时,最好的方式是拥有自己的网站,通过网络来传播和展示您的产品信息。产品展示系统,为客户详细介绍自己的产品,提供了一个功能强大的平台。 系统界面友好、功能强大、操作简便,用户可以方便迅速掌握系统的操作。 4人事管理系统(限最多3人选) 项目描述:人事档案完整资料、人事分类管理(员工户口状况、员工政治面貌、员工生理状况、员工婚姻状况、员工合同管理、员工投保情况、员工担保情况)、考勤管理、加班管理、出差管理、人事变动管理(新进员工登记、员工离职登记、人员变更记录)、员工培训管理(员工培训、员工学历)、考核奖惩、养老保险等几大模块。系统具有人事档案资料完备,打印灵活,多样、专业的报表设计,灵活的查询功能等特点。 主要技能:掌握项目的开发流程:需求分析、详细设计、测试等;熟悉VC的多文档的开发技能和技巧;利用ADO技术操作SQL Server数据库;掌握数据库的开发和操作技能。 5、即时通讯系统(限最多3人选) 项目描述:系统采用UDP协议,具有:收发在线和离线消息、添加/删除好友、服务器端存储好友列表、在客户端存储好友资料和聊天记录、添加/删除好友组、可以群发消息、收发文件等功能。 主要技能:掌握项目的开发流程:需求分析、详细设计、测试等;熟悉VC的网络通信的开发技能和技巧,包括:TCP和UDP协议、线程等;利用ADO技术操作SQL Server数据库; 6、推箱子(限最多3人选) 【规则】本游戏的目的就是把所有的箱子都推到目标位置上。箱子只能推动而不能拉动。一次只能推动一个箱子。 经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道~! 7、贪吃蛇(限最多3人选) 【规则】: A 用键盘的方向键控制蛇的上下左右移动。 B 游戏分为三种难度,SLUG为慢速,每吃一朵花得1分;WORM 为中速,每吃一朵花得2分;PYTHON为快速,每吃一朵花得3分。 C 游戏目标:操纵屏幕上那条可爱的小蛇,在黑框中不停吃花,而每吃一朵

数据结构课程设计(内部排序算法比较_C语言)

数据结构课程设计 课程名称:内部排序算法比较 年级/院系:11级计算机科学与技术学院 姓名/学号: 指导老师: 第一章问题描述 排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。比较的结果用一个直方图表示。

第二章系统分析 界面的设计如图所示: |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------| |******************************| 请选择操作方式: 如上图所示该系统的功能有: (1):选择1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并 打印出结果。 (2)选择2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。 (3)选择0 打印“谢谢使用!!”退出系统的使用!! 第三章系统设计 (I)友好的人机界面设计:(如图3.1所示) |******************************| |-------欢迎使用---------| |-----(1)随机取数-------| |-----(2)自行输入-------| |-----(0)退出使用-------|

《HTML网页编程技术综合课程设计》教学实施方案

《HTML网页编程技术综合课程设计》教学实施方案

————————————————————————————————作者:————————————————————————————————日期:

《网页编程技术综合课程设计》教学方案 一、课程设计目标 通过该课程设计综合应用本学期所学的网页制作知识,全面建立对网站的认知,建立网站设计与网页制作的基本思想;学会网站功能规划、网站布局、网页制作、网页配色等的基本技巧,掌握网页制作与网站设计相关软件的使用方法;通过课程设计教学环节能够制作有一定实用性的网站;能解决一些实际应用问题并以此为基础进一步扩展到相关的学科上;通过本课程设计提高网页的审美意识;通过团队合作制作网站,培养团队协作精神,初步了解软件企业开发软件系统模式,为将来适应工作打开良好的基础。 二、设计要求 1.本课程设计分小组进行,各小组成员原则上2~4人,不得超过4人,由小组长协调分工,每个组员充分发挥团队协作精神。 2.自选主题,使用Dreamweaver网页设计与制作软件,设计并制作一个内容完整、结构规范合理的静态网站,要求选取内容健康,网站中出现一定数量的图像和多媒体。网站主题应大小适中、内容健康、具有时代气息;网站提供的信息应与网站主题相符合, 主题突出、内容丰富; 3.页面设计合理、美观,有创意,适用于各种显示器的分辨率和颜色。 4.每个页面都要求有导航条和页脚信息,需要将这些信息制作成库项目,然后根据需要将之插入到模板或其它页面中。各个页面都要有标题,而且布局要合理、美观、大方。布局网页时要尽量主流布局方法(必须使用Div、表格等),并要有一定复杂度。 5.页面中需要有文字、图像、多媒体、超链接等,要求达到图文并茂的效果。所使用的文字的大小、字体和颜色要认真处理,除非特殊需要,不能出现空链接,文字不能简单用截图代替;所需图像和多媒体素材尽量自己设计,如有下载,自己必须再作处理,不得直接使用现有商业网站标志。 6. 为了保证页面的设计效果更好地兼容各种浏览器以及便于改版,要求用独立的CSS文件设置页面内容格式。 7.为主页添加背景音乐。 8.需要使用一定量的JavaScript脚本,使网页具有一定的交互功能。每小组必须制作一个表单,表单输入内容需要使用正则表达式进行验证。

数据结构课程设计之综合排序代码及使用方法

题目1: 利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: 1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结 果保存在不同的文件中。 2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 代码如下: #include //标准输入输出头文件 #include //定义杂项函数及内存分配函数 #include //字符串处理 #include //定义关于时间的函数 #define N 20000 clock_t Start,Now;//时钟 void Wrong()//错误输出 { printf("\n*****按键错误!请重新输入*****\n"); getchar();//从标准输入获取字符并返回下一个字符 } void change(int a[])//十个一行输出 { int i; system("cls");//清除之前的操作 for(i=0;i

数据结构课程设计排序实验报告

《数据结构》课程设计报告 专业 班级 姓名 学号 指导教师 起止时间

课程设计:排序综合 一、任务描述 利用随机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。 (2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 要求:根据以上任务说明,设计程序完成功能。 二、问题分析 1、功能分析 分析设计课题的要求,要求编程实现以下功能: (1)随机生成N个整数,存放到线性表中; (2)起泡排序并计算所需时间; (3)简单选择排序并计算时间; (4)希尔排序并计算时间; (5)直接插入排序并计算所需时间; (6)时间效率比较。 2、数据对象分析 存储数据的线性表应为顺序存储。 三、数据结构设计 使用顺序表实现,有关定义如下: typedef int Status; typedef int KeyType ; //设排序码为整型量 typedef int InfoType; typedef struct { //定义被排序记录结构类型 KeyType key ; //排序码 I nfoType otherinfo; //其它数据项 } RedType ; typedef struct { RedType * r; //存储带排序记录的顺序表 //r[0]作哨兵或缓冲区 int length ; //顺序表的长度 } SqList ; //定义顺序表类型 四、功能设计 (一)主控菜单设计

综合课程设计1题目2016-2017.2

综合课程设计1 一、考核方法和内容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%以上; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸张打印,报告总页数控制在10—15页内,报告中不能全是代码,报告中代码总量控制在3页内。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的具体内容 1.想要优,必须实现“提高部分”的功能,但,实现“提高部分”不代表一定优; 2.其他成绩,不用完成“提高部分”。 要求:全部采用数据结构课程中的内容实现,采用C或C++实现,逻辑结构只能选线性结构、树型结构、图型结构、集合结构中的一种,不能用数据库。 1、算术表达式求解 基本要求:给定一个算术表达式,通过程序求出最后的结果。 (1)从键盘输入要求解的算术表达式; (2)采用栈结构进行算术表达式的求解过程;

数据结构课程设计排序算法总结

排序算法: (1) 直接插入排序 (2) 折半插入排序(3) 冒泡排序 (4) 简单选择排序 (5) 快速排序(6) 堆排序 (7) 归并排序 【算法分析】 (1)直接插入排序;它是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好的序的有序表中,从而得到一个新的、记录数增加1的有序表。 (2)折半插入排序:插入排序的基本操作是在一个有序表中进行查找和插入,我们知道这个查找操作可以利用折半查找来实现,由此进行的插入排序称之为折半插入排序。折半插入排序所需附加存储空间和直接插入相同,从时间上比较,折半插入排序仅减少了关键字间的比较次数,而记录的移动次数不变。 (3)冒泡排序:比较相邻关键字,若为逆序(非递增),则交换,最终将最大的记录放到最后一个记录的位置上,此为第一趟冒泡排序;对前n-1记录重复上操作,确定倒数第二个位置记录;……以此类推,直至的到一个递增的表。 (4)简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。 (5)快速排序:它是对冒泡排序的一种改进,基本思想是,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 (6)堆排序: 使记录序列按关键字非递减有序排列,在堆排序的算法中先建一个“大顶堆”,即先选得一个关键字为最大的记录并与序列中最后一个记录交换,然后对序列中前n-1记录进行筛选,重新将它调整为一个“大顶堆”,如此反复直至排序结束。 (7)归并排序:归并的含义是将两个或两个以上的有序表组合成一个新的有序表。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序称为2-路归并排序。 【算法实现】 (1)直接插入排序: void InsertSort(SqList &L){ for(i=2;i<=L.length ;i++) if(L.elem[i]L.elem[0];j--) L.elem [j+1]=L.elem [j]; L.elem [j+1]=L.elem[0]; } } (2)折半插入排序:

《操作系统》综合课程设计教学大纲

《操作系统课程设计》教学大纲 课程类型:专业必修课 学分:0.5 计划周数:1周 预修课程:高级语言程序设计、微机原理、数据结构 开设学期:第四学期 适用专业:计算机科学与技术本科、网络工程本科、软件工程本科 一、课程设计目的与任务 《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。在计算机软硬件课程的设置上,它起着承上启下的作用。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,用户在使用计算机时都要得到操作系统提供的服务。操作系统课程设计的主要任务是研究计算机操作系统的基本原理和算法,掌握操作系统的进程管理、存储管理、文件管理和设备管理的基本原理与主要算法。目的是使学生掌握常用操作系统(如DOS、Windows或Linux)的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的掌握,从而充分理解系统调用与程序设计之间的关系。 二、课程设计选题 设计项目一:动态资源分配算法演示程序(银行家算法) 内容: 主要用于解决多种资源被多个独立执行的进程共享的安全算法。采用矩阵存储资源的数据,通过对系统资源预分配后检查系统状态,以避免死锁的产生。 要求: 1.资源种类与数目可在界面进行设置,在资源分配过程中可以随时增加进程及其对资源的需求。 2.可读取样例数据(要求存放在外部文件中)进行资源种类、数目与进程数的初始化。 3.在资源分配过程中可以随时进行系统安全状态检测。

4.如果能够通过系统安全状态检测,则系统对该进程进行资源分配;当进程满足所有资 源分配后能够自行释放所有资源,退出资源竞争。 5.要求进行安全性检查时按指定策略顺序进行,即按每个进程当前Need数由小至大进 行排序,如果Need数相同,则按序号由小至大进行排序; 6.具有一定的数据容错性。 设计项目二:通用处理机调度演示程序 内容: 设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。 要求: 1.进程调度算法包括:时间片轮转算法、先来先服务算法、短作业优先算法、静态优先权 优先调度算法、高响应比调度算法。 2.每一个进程有一个PCB,其内容可以根据具体情况设定。 3.进程数、进入内存时间、要求服务时间、作业大小、优先级等均可以在界面上设定。 4.可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、 作业大小、进程优先级的初始化 5.可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间的同 步关系,故只有两种状态) 6.采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态及相应的阻 塞队列。 7.有性能比较功能,可比较同一组数据在不同调度算法下的平均周转时间。 设计项目三:用多进程同步方法演示“桔子苹果”问题 内容: 有两类生产者,一类负责生产桔子,一类负责生产苹果;有两类消费者,一类负责消费桔子,一类负责消费苹果;他们共享一个有20个存储单元的有界缓冲区,每个存储单元只能放入一种产品(桔子/苹果)。 要求: 1.二类生产者与二类消费者数目均为20,即20个生产者负责生产桔子,20个生产者负责生产苹果;20个消费者负责消费桔子,20个消费者负责消费苹果。

数据结构课程设计(附代码)

上海应用技术学院课程设计报告 课程名称《数据结构课程设计》 设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级 姓名学号指导教师日期 一.目的与要求 1. 巩固和加深对常见数据结构的理解和掌握 2. 掌握基于数据结构进行算法设计的基本方法 3. 掌握用高级语言实现算法的基本技能 4. 掌握书写程序设计说明文档的能力 5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力 二.课程设计内容说明 1. 项目一 (1) 对设计任务内容的概述 学生成绩管理** 任务:要求实现对学生资料的录入、浏览、插入和删除等功能。 输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。 (2) 详细设计 LinkList *create():输入学生成绩记录函数; void print(LinkList *head):显示全部记录函数 LinkList *Delete(LinkList *head):删除记录函数 LinkList *Insert(LinkList *head):插入记录函数 void menu_select():菜单选择 void ScoreManage():函数界面

(3) 程序流程图 (4) 程序模块及其接口描述 该程序可以分为以下几个模块: 1、菜单选择:void menu_select(); 提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

学生成绩排名系统课程设计

《程序设计基础》课程设计 ------学生成绩排名系统 第一章课程设计的目的和要求 高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时巩固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的基本方法,熟悉程序开发的全过程,提高综合应用语言的能力。高级语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。 1.1课程设计的目的 1.巩固和掌握高级语言程序设计基本概念; 2.掌握基本的程序设计方法; 3.掌握开发软件所需的需求定义能力; 4.提高书写程序设计说明文档的能力; 5.提高综合运用高级语言的能力,强化编程和调试能力。 1.2 课程设计的基本要求 1.根据所给的课程设计题目,分析课程设计题目的要求; 2.对系统功能模块进行分析,写出详细的设计说明文档; 3.编写程序代码,调试所编写程序使其能正确运行; 4.设计完成的软件便于完成和使用; 5.设计完成后提交课程设计报告;

第二章课程设计任务内容2.1 考核内容 2.1.1 编写的C++语言程序 ●针对编写的C++程序,应该主要考查下列内容: ●是否符合题目要求,是否完成了主要功能; ●是否存在语法错误、逻辑错误及运行错误; ●程序设计是否合理; ●程序是否具有良好的可读性和可靠性; ●是否符合结构化程序设计所倡导的基本理念; ●用户界面是否友好。 2.1.2 课程设计报告 ●针对提交的课程设计报告,应该主要考查下列内容: ●程序设计的报告内容是否全面,观点是否正确; ●设计过程是否符合结构化程序设计方法的基本原则; ●层次是否清楚,语言是否通顺; ●各种图表是否规范;是否具有良好的程序设计习惯。 2.2 课题 10、学生信息管理系统设计 实现以下功能: 1) 系统以菜单方式工作; 2) 学生信息录入功能(学生信息用文件保存); 3) 学生信息浏览功能; 4) 查询、排序功能(至少两种查询依据和两种排序依据); 5) 学生信息删除、修改功能。

拓扑排序课程设计报告

拓扑排序 一问题描述 本次课程设计题目是:编写函数实现图的拓扑排序 二概要设计 1.算法中用到的所有各种数据类型的定义 在该程序中用邻接表作为图的存储结构。首先,定义表结点和头结点的结构类型,然后定义图的结构类型。创建图用邻接表存储的函数,其中根据要求输入图的顶点和边数,并根据要求设定每条边的起始位置,构建邻接表依次将顶点插入到邻接表中。 拓扑排序的函数在该函数中首先要对各顶点求入度,其中要用到求入度的函数,为了避免重复检测入度为零的顶点,设置一个辅助栈,因此要定义顺序栈类型,以及栈的函数:入栈,出栈,判断栈是否为空。 2.各程序模块之间的层次调用关系 第一部分,void CreatGraph(ALGraph *G)函数构建图,用邻接表存储。这个函数没有调用函数。 第二部分,void TopologicalSort(ALGraph *G)输出拓扑排序函数,这个函数首先调用FindInDegree(G,indegree)对各顶点求入度indegree[0……vernum-1];然后设置了一个辅助栈,调用InitStack(&S)初始化栈,在调用Push(&S,i)入度为0者进栈,while(!StackEmpty(&S))栈不为空时,调用Pop(&sS,&n)输出栈中顶点并将以该顶点为起点的边删除,入度indegree[k]--,当输出某一入度为0的顶点时,便将它从栈中删除。 第三部分,主函数,先后调用void CreatGraph(ALGraph *G)函数构建图、void TopologicalSort(ALGraph *G)函数输出拓扑排序实现整个程序。 3.设计的主程序流程

数据结构课程设计报告---几种排序算法的演示(附源代码)

数据结构课程设计报告 —几种排序算法的演示 时间:2010-1-14 一需求分析 运行环境 Microsoft Visual Studio 2005

程序所实现的功能 对直接插入排序、折半插入排序、冒泡排序、简单选择排序、快速排序、堆排序、归并排序算法的演示,并且输出每一趟的排序情况。 程序的输入(包含输入的数据格式和说明) <1>排序种类三输入 <2>排序数的个数的输入 <3>所需排序的所有数的输入 程序的输出(程序输出的形式) <1>主菜单的输出 <2>每一趟排序的输出,即排序过程的输出 二设计说明 算法设计思想 <1>交换排序(冒泡排序、快速排序) 交换排序的基本思想是:对排序表中的数据元素按关键字进行两两比较,如果发生逆序(即排列顺序与排序后的次序正好相反),则两者交换位置,直到所有数据元素都排好序为止。 <2>插入排序(直接插入排序、折半插入排序) 插入排序的基本思想是:每一次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。开始时建立一个初始的有序序列,它只包含一个数据元素。然后,从这个初始序列出发不断插入数据元素,直到最后一个数据元素插到有序序列后,整个排序工作就完成了。 <3>选择排序(简单选择排序、堆排序)

选择排序的基本思想是:第一趟在有n个数据元素的排序表中选出关键字最小的数据元素,然后在剩下的n-1个数据元素中再选出关键字最小(整个数据表中次小)的数据元素,依次重复,每一趟(例如第i趟,i=1,…,n-1)总是在当前剩下的n-i+1个待排序数据元素中选出关键字最小的数据元素,作为有序数据元素序列的第i个数据元素。等到第n-1趟选择结束,待排序数据元素仅剩下一个时就不用再选了,按选出的先后次序所得到的数据元素序列即为有序序列,排序即告完成。 <4>归并排序(两路归并排序) 两路归并排序的基本思想是:假设初始排序表有n个数据元素,首先把它看成是长度为1的首尾相接的n个有序子表(以后称它们为归并项),先做两两归并,得n/2上取整个长度为2的归并项(如果n为奇数,则最后一个归并项的长度为1);再做两两归并,……,如此重复,最后得到一个长度为n的有序序列。 程序的主要流程图

《数据结构》课程设计报告-排序综合模板

《数据结构》课程设计报告 专业计算机科学与技术 班级(1) 姓名 学号 指导教师 起止时间2011.10~2011.12

课程设计:排序综合 一、任务描述 (1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。 (2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 二、问题分析 1、功能分析 分析设计课题的要求,要求编程实现以下功能: (1)显示随机数:调用Dip()函数输出数组a[]。数组a[]中保存有随机产生的随机数。 (2)直接选择排序:通过n-I次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换之。 (3)冒泡排序:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。 (4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。 (5)直接插入排序:将一个记录插入到已排序好的有序表中,从而得到一个新的、记录数增1的有序表。设整个排序有n个数,则进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序列为止。 (6)显示各排序算法排序后的的数据和时间效率,并比较找出其中2种较快的方法。 2、数据对象分析 排序方式:直接选择排序、冒泡排序、希尔排序、直接插入排序

数据结构课程设计 多关键字排序 高考排序

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 专业班级: 系 (院): 设计时间: 设计地点:
数据结构课程设计 多关键字排序
周宣 学 号: 110821120 网络工程 081
计算机工程学院 2009.12.28~2010.1.12 软件工程实验室、教室
指导教师评语:
成绩:
签名:
年月日

数据结构课程设计报告
第 1 页,共 页
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序 求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水 平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:
任务
题目:多关键字的排序
【问题描述】 多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外, 不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求 排出考生录取的次序。 【基本要求】 (1)假设待排序的记录不超过 10000,表中记录的关键字数不超过 5,各个学科关键字的范围均为 0 至 100,总分关键字的范围是 0-300。按用户给定的进行排序的关键字的优先关系,输出排序结果。 (2)约定按 LSD 法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用 稳定的内部排序法,其二是利用“分配”和“收集”的方法。并综合比较这两种策略。 【测试数据】 由随机数产生器生成。 【实现提示】 由于是按 LSD 方法进行排序,则对每个关键字均可进行整个序列的排序,但在利用通常的内部排序 方法进行排序时,必须选用稳定的排序方法 要求: 1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计 实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准 备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加 大代码的重用率。 2、.设计的题目要求达到一定工作量(300 行以上代码),并具有一定的深度和难度。 3、程序设计语言推荐使用 C/C++,程序书写规范,源程序需加必要的注释; 4、每位同学需提交可独立运行的程序; 5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于 10 页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

排序综合数据结构课程设计论文

. XX职业技术师X大学 课程设计任务书 理学院数学0902班学生(16)马新月 课程设计课题: 16、综合排序: 利用随机函数随机产生N=200个随机整数,对这些数进行多种方法的排序。 要求:1)至少采用三种方法实现上述问题求解(插入排序、希尔排序、冒泡排序、快速排序、堆排序、归并排序)。把排序后的结果存在不同的文 件中。 2)记录不同排序方法的运行时间,找出自己排序方法中最快的两种方法。 3)统计每种算法所用的比较次数和交换次数,以列表显示出来。 一、课程设计工作日自2012 年2月21日至2012年3月4日 二、同组学生:马新月 三、课程设计任务要求(包括课题来源、类型、目的和意义、基本要求、完成时 间、主要参考资料等): 课题来源:教师提供 课题类型:设计 课程设计的目的 1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操 作实现算法,以及它们在程序中的使用方法。 2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规X化软件设计的能力。3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力

XX职业技术师X大学 课程设计评审表学院班学生

1概要 1.1设计目的 数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。 1)本演示程序对以下6种常用的内部排序算法进行实测比较:冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序; 2)待排序表的元素的关键字为整数。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换记为3次移动); 3)演示程序以以用户和计算机的对话方式执行,在计算机终端上显示提示信息,对随机数组进行排序,并输出比较指标值; 4)最后对结果作出简单分析。 1.2预期目标 按要求输入不同的操作。输入后,根据不同的输入进行不同的操作,最终达到对各算法进行比较的目的。通过此次课程设计主要达到以下目的了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用

数据结构课程设计题目

1.数制转换问题 任意给定一个M进制的数x ,请实现如下要求 1) 求出此数x的10进制值(用MD表示) 2) 实现对x向任意的一个非M进制的数的转换。 3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.猴子吃桃子问题 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 要求: 1) 采用数组数据结构实现上述求解 2) 采用链数据结构实现上述求解 3) 采用递归实现上述求解 4)其它方法 3.长整数运算 设计一个程序实现两个任意长的整数求和运算。 提示:可利用双项循环链表实现长整数的存储,每个结点含一个整型变量。

4.学生成绩管理系统 现有学生成绩信息文件1(1.txt),内容如下(数据可以自拟) 姓名学号语文数学英语 张明明01 67 78 82 李成友02 78 91 88 张辉灿03 68 82 56 王露04 56 45 77 陈东明05 67 38 47 …. .. .. .. … 学生成绩信息文件2(2.txt),内容如下: 姓名学号语文数学英语 陈果31 57 68 82 李华明32 88 90 68 张明东33 48 42 56 李明国34 50 45 87 陈道亮35 47 58 77 …. .. .. .. … 试编写一管理系统,要求如下: 1) 实现对两个文件数据进行合并,生成新文件3.txt 2) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3) 对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现) 4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现) 5) 要求使用结构体,链或数组等实现上述要求。

排序综合-课程设计报告

课程设计 课程设计名称:排序综合 专业班级: 0000000000000 学生姓名: 0000000000000 学号: 00000000000000 指导教师: 00000000000000 课程设计时间: 2010.6.21-2010.6.25

计算机科学与技术专业课程设计任务书 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

信息科学与工程学院课程设计成绩评价表课程名称:数据结构课程设计

1、需求分析 1.1、直接插入排序 思路:设有一组关键字{K1,K2,…….,Kn},排序开始变认为K1是一个有序的序列,让K2插入到表长为1的有序序列,使之成为一个表长为2的有序序列, 让K3插入到表长为2的有序序列,使之成为一个表长为3的有序序列,依次类推,最后让Kn插入上述表长为n-1的有序序列,得到一个表长为n的有序序列. 1.2、希尔排序 思路:先取一个正整数d1(d1=1),即所有记录成为一个组为此.一般选d1约为n/2,d2为d1/2,…….,di=1 1.3、快速排序:(递归和非递归) 思路:以第一个关键字K1为控制字,将[K1、K2、….Kn]分成两个子区,使左区的有关键字小于等于K1,右区所有关键字大于等于K1,最后控制居两个子区中间的适当位置。在子区内数据尚处于无序状态。 将右区首、尾指针保存入栈,对左区进行与第(1)步相类似的处理,又得到它的左子区和右子区,控制字区中。 重复第(1)、(2)步,直到左区处理完毕。然后退栈对一个个子区进行相类似的处理,直到栈空 分区处理函数hoare 思路:首先用两个指针i、j分别指向首、尾两个关键字,i=1,j=8。如对(46、56、14、43、95、10、19、72)。第一个关键字46作为控制字,该关键字所属的记录另存储在一个x变量中。从文件右端元素r[j].key开始与控制字

相关文档
相关文档 最新文档