内部排序算法实现与性能分析课程设计.
内部排序课程设计报告
内部排序课程设计报告一、教学目标本课程的教学目标是使学生掌握内部排序的基本概念、算法和应用。
通过本课程的学习,学生应能理解内部排序的原理,熟练运用各种排序算法解决实际问题,并培养逻辑思维和编程能力。
具体来说,知识目标包括:1.了解内部排序的基本概念,如排序、逆序、稳定性等。
2.掌握各种内部排序算法的原理和实现,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。
3.理解内部排序在实际应用中的重要性,如数据库查询、文件整理等。
技能目标包括:1.能够运用内部排序算法解决实际问题,如对给定的数据集进行排序。
2.能够编写程序实现内部排序算法,提高编程能力。
3.能够对不同的内部排序算法进行比较和优化,提高算法效率。
情感态度价值观目标包括:1.培养学生的团队合作精神,通过小组讨论和合作完成排序任务。
2.培养学生的创新意识,鼓励学生提出新的排序算法和改进方案。
3.培养学生的综合素养,使学生认识到内部排序在现实生活中的应用和价值。
二、教学内容本课程的教学内容主要包括内部排序的基本概念、算法和应用。
具体的教学大纲如下:1.内部排序的基本概念:介绍排序的定义、逆序、稳定性等基本概念。
2.冒泡排序算法:讲解冒泡排序的原理和实现,并通过编程实践让学生掌握该算法。
3.选择排序算法:讲解选择排序的原理和实现,并通过编程实践让学生掌握该算法。
4.插入排序算法:讲解插入排序的原理和实现,并通过编程实践让学生掌握该算法。
5.快速排序算法:讲解快速排序的原理和实现,并通过编程实践让学生掌握该算法。
6.归并排序算法:讲解归并排序的原理和实现,并通过编程实践让学生掌握该算法。
7.内部排序的应用:介绍内部排序在实际应用中的重要性,如数据库查询、文件整理等。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
1.讲授法:教师通过讲解内部排序的基本概念、算法和应用,使学生掌握相关知识。
内部排序算法比较课程设计报告(7种基本排序)
合肥学院计算机科学与技术系1、问题分析和任务定义各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间,存在一定的却缺陷。
我们将通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
所设计的程序应能够将产生的随机数据同时用不同的内部排序算法排序,并列出关键字比较次数与移动次数,方便比较。
待排序表的表长不少于100,为方便起见,我们令表长等于100,用5组随机的数据排序的结果作比较。
2、数据结构的选择和概要设计一.可能排序表的抽象数据类型定义:ADTOrderableList{数据对象:D={|∈IntegerSet,i=1,2,……,n,n≥0}数据关系:R1={<,|,∈D,i=2,……n}基本操作:InitList(n)操作结果:构造一个长度为n,元素值依次为1,2,……,n的有序表。
RandomizeList(d,isInverseOrder)操作结果:首先根据isInverseOrder为True或False,将表置为逆序或正序,然后将表进行d(0≤d≤8)级随机打乱。
d为0时表不打乱,d越大,打乱程度越高。
RecallList()操作结果:恢复最后一次用RandomizeList随机大乱的可排序表。
ListLength()操作结果:返回可排序的长度。
ListEmpty()操作结果:若可排序表为空表,则返回True,否则返回False。
BubbleSort(&c,&s)操作结果:进行冒泡排序,返回关键字比较次数c和移动次数s。
InsertSort(&c,&s)操作结果:进行插入排序,返回关键字比较次数c和移动次数s。
SelectSort(&c,&s)操作结果:进行选择排序,返回关键字比较次数c和移动次数s。
QuickSort(&c,&s)操作结果:进行快速排序,返回关键字比较次数c和移动次数s。
数据结构课程设计(内部排序算法性能分析)
“数据结构”课程设计报告(内部排序算法性能分析)学生姓名:指导教师:所在系:所学专业:年级:目录1、需求分析..................................................... - 1 -1.1、选题要求 (1)1.2、选题的意义及背景 (1)1.3、课程设计目标 (1)2、概要设计..................................................... - 2 -2.1、原始数据 (2)2.2、输出数据 (2)2.3、数据处理 (2)2.4、逻辑结构及物理结构 (3)2.5、系统的模块划分及模块功能 (3)2.5.1主程序模块....................................................................................................... - 3 -2.5.2可排序表单元模块........................................................................................... - 3 -2.6、模块的测试数据 (4)3、详细分析..................................................... - 5 -4、调试分析..................................................... - 6 -5、用户手册..................................................... - 9 -6、测试结果.................................................... - 10 -6.1测试用例及选择原因 (10)6.2测试结果 (10)7、总结........................................................ - 12 -8、参考文献.................................................... - 13 -9、小组人员分工................................................ - 13 -致谢......................................................... - 13 -1、需求分析1.1、选题要求对各种排序算法进行定量的性能分析。
课设—内部堆排序算法实现
数据结构课程设计设计说明书内部排序堆排序算法的实现学生姓名李超凡学号1118014123班级计本1104班成绩指导教师林勇数学与计算机科学学院2013年9月9日课程设计任务书2013—2014学年第一学期课程设计名称:数据结构课程设计课程设计题目:内部堆排序算法的实现完成期限:自2013年9月9日至2013年9月21 日共2 周设计内容:1.任务说明堆排序是数据结构中内排序部分的重点知识。
堆分为大顶堆和小顶堆。
堆排序的过程主要解决两个问题:(1)把无序序列建成一个堆;(2)输出堆顶元素后,重新将剩余元素调整成新堆。
本课程设计主要完成的核心内容即为此。
按以下的要求运用C/ C++结构体、指针、数据结构等基知识编程实现。
2.要求1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。
4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。
5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。
6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析;7)编写课程设计报告;3.参考资料指导教师:林勇教研室负责人:曹阳课程设计评阅摘要为了查找方便,通常希望通过排序使表成为按关键字有序排列。
本设计利用简单排序的堆排序方法,通过建立大根堆,并对排好序的元素进行输出,实现用户输入的一组可以组成堆的数据元素进行处理,使其按关键字排成一个有序的序列,从而有效的提高了查找效率。
再加上界面友好、操作简单,使其更加好用。
关键词:堆排序;大顶堆;查找`目录1 课题描述 (1)2 问题分析及任务定义 (2)3 逻辑设计 (3)3.1整体设计 (3)3.2抽象数据类型 (3)(1)首先是存储结构: (4)(2)抽象数据类型 (4)3.3各个模块之间的关系 (4)4 详细设计 (6)4.1首先是整体的主要设计思想 (6)4.2 程序流程图及实现代码 (6)4.2.1 输入数据并存储到内存中 (6)4.2.2 堆排序函数(含建立大根堆) (6)4.4菜单函数 (9)4.5 主函数 (9)5 程序编码 (11)6 程序调试及测试 (15)6.1 第一组 (15)6.2第二组 (16)7 结果分析 (18)8 总结 (19)参考文献 (20)1 课题描述本次课题的内容就是应用堆排序实现关键字有序的算法。
内排序课程设计
内排序课程设计一、课程目标知识目标:1. 学生能理解内排序的基本概念,掌握不同内排序算法的特点及适用场景。
2. 学生能描述冒泡排序、选择排序、插入排序等常见内排序算法的步骤及原理。
3. 学生了解内排序算法的时间复杂度和空间复杂度,能分析其优缺点。
技能目标:1. 学生能运用编程语言实现冒泡排序、选择排序、插入排序等内排序算法。
2. 学生具备分析实际问题并选择合适内排序算法解决的能力。
3. 学生能通过调试和优化内排序算法,提高程序性能。
情感态度价值观目标:1. 学生培养对算法学习的兴趣,增强解决问题的自信心。
2. 学生养成合作、探究的学习习惯,培养团队精神和创新意识。
3. 学生认识到算法在计算机科学中的重要性,理解科技发展对社会进步的推动作用。
课程性质:本课程为计算机科学课程,以算法学习为主,强调理论与实践相结合。
学生特点:六年级学生具备一定的逻辑思维能力,对计算机编程有初步了解,但对复杂算法的认识有限。
教学要求:结合学生特点,采用案例教学、任务驱动等方法,引导学生主动探究,注重培养学生的实际操作能力和问题解决能力。
在教学过程中,关注学生的情感态度,激发学习兴趣,提高学生的综合素质。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容1. 内排序概念:介绍内排序的定义、分类及在计算机科学中的应用。
- 冒泡排序- 选择排序- 插入排序2. 常见内排序算法:- 冒泡排序:讲解算法原理、步骤,分析时间复杂度和空间复杂度。
- 选择排序:介绍算法原理、步骤,分析优缺点及适用场景。
- 插入排序:阐述算法原理、步骤,分析时间复杂度和空间复杂度。
3. 内排序算法分析:- 时间复杂度:讲解如何计算内排序算法的时间复杂度,比较不同算法的时间性能。
- 空间复杂度:分析内排序算法的空间复杂度,探讨如何优化算法空间性能。
4. 编程实践:- 冒泡排序、选择排序、插入排序的实现。
- 算法性能比较与优化。
内部排序算法性能分析之数据结构课程设计
课程名称:数据结构本科学生课程设计(论文)题目内部排序算法性能分析姓名阳明学号104328318117680学部计算机科学与技术专业、年级计科1003指导教师刘琼2011年12月24日湖南涉外经济学院本科课程设计(论文)摘要排序是计算机科学中基本的研究课题之一,其目的是方便记录的查找、插入和删除.通过描述冒泡、选择、插入、堆和快速6种排序算法,内部排序其算法灵活方便,因此成为了程序算法中一个必不可少的应用,所以在应用之前要经过严谨的思考才不会出错,不会造成计算机运算速度的延迟,才会完全发挥内部排序的性能。
内部排序的方法种类繁多,但就其全面性能而言,很难提出一种被认为是最好的方法。
但就其全面性能而言,很难提出一种被认为是最好的方法,每一种方法都有各自的优缺点,适合不同的环境(如记录的初始排序列状态等)下使用。
如果安排序过程中依据的不同原则对内部排序方法进行分类,则大致可分为插入排序、交换排序,选择排序,归并排序和计数排序等五类;如果按内部排序过程中所需要的工作量来区分,则可分为3类:(1)简单的排序方法,该时间复杂度为O(n*n);(2)先进的排序方法,该时间复杂度为O(nlogn);(3)基数排序,其时间复杂度为O(d*n);主要介绍非常实用而算法又容易接受的的这六类排序。
由于很多人在使用的过程中,不知道那种排序适合他们的程度设计,因此导致该算法没有得到充分的应用,起泡排序最简单的排序,很容易写出代码,但运算时间复杂度稍长一些;直接排序能够很快的最大和最小的数据,但假如数据较多,操作比较繁琐;简单选择排序稳定比较次数与起泡排序一样,则相对之还要慢;快速排序速度快,数据移动少,平均性能比较好,但是性能不稳定;希尔排序是插入算法的改进,由于多次的插入造成了其稳定性不好;堆排序在最坏情况下时间复杂度也为O(nlogn),并且它仅需一个记录大小供交换用的辅助存储空间,但在记录数较少时不提倡使用;但本文主要介绍这6类排序(起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序)一些优点和缺陷,对缺陷加以改进。
C++版数据结构各种内部排序比较课程设计
****课程设计报告题目:各种内部排序性能比较学生姓名:彭伟奇学号: 1021112417班级:10211124指导教师:高永平2012年6 月15 日一、课程设计目的本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、实验要求任务:用程序实现插入法排序、起泡法、选择法、快速法、合并法排序;输入的数据形式为任何一个正整数,大小不限。
输出的形式:数字大小逐个递增的数列。
功能要求:给出多组不同元素个数的输入数据(可考虑用随机函数生成整数,而不用人工输入),并用列表打印出每种排序下的各趟排序结果。
每个排序法结束时应打印出其元素比较的次数和交换的次数。
此程序需将结果用列表打印,一定要将其打印结果排列好。
三、程序源代码#include "stdlib.h"#include"stdio.h"#include"time.h"#define MAXSIZE 200typedef int KeyType;typedef struct //定义存储记录关键字及其他信息的结构体{ KeyType key;char other;}RedType;typedef struct //定义存储所有记录的结构体{ RedType r[MAXSIZE+1];int length;}SqList;typedef struct{int move; /*记录数据移动次数*/int comp; /*记录数据比较次数*/}Recode;int dlta[5]={31,15,7,3,1}; //初始化希尔排序的增量序列int num[10]={0}; //记录每个排序方法的移动次数和比较次数int flag=0; //标记变量//利用产生的随即数模拟用户输入的数据class sort{public:void select_sort(SqList L);void Zhijie(SqList L) ;void ShellInsert(SqList *L,int dk,Recode *r);void ShellSort(SqList L,int dlta[],int t) ;void Maopao(SqList L);int Partition(SqList *L,int low,int high,Recode *r); void QuickSort(SqList L) ;protected:int dk,dlta[5],t,low,high;};void create(SqList *L,int length){ int i;srand(time(0));L->length=length;for(i=1;i<=L->length;i++){L->r[i].key=rand()%1000;L->r[i].other=rand()%5;}}/*输出元素*/void visit(SqList L){int i;printf("\n");for(i=1;i<=L.length;i++)printf("%4d%2c",L.r[i].key,L.r[i].other);printf("\n");}/*简单选择排序*/void select_sort(SqList L){ Recode r;p =0;r.move =0;int i,j,k;RedType t;for (i=1;i<L.length;i++){ j=i;for (k=i+1;k<=L.length;k++){ p++;if (L.r[j].key>L.r[k].key){j=k;}}if (i!=j){t=L.r[j];L.r[j]=L.r[i];L.r[i]=t;r.move =r.move +3;}}if(!flag){ printf("本次随机数据排序的移动次数为:");printf("%d\n",r.move);printf("本次随机数据排序的比较次数为:");printf("%d\n",p);printf("简单选择排序后的结果:");visit(L);}else{num[0]=r.move;num[1]=p;}}//直接插入排序void Zhijie(SqList L){ Recode r;p =0;r.move =0;int j;for(int i=2;i<=L.length;++i){ p ++;if(L.r[i].key<L.r[i-1].key){L.r[0]=L.r[i]; //复制为哨兵L.r[i]=L.r[i-1];r.move=r.move +2;for(j=i-2;L.r[0].key < L.r[j].key;--j){L.r[j+1]=L.r[j]; //记录后移r.move ++;p ++;}L.r[j+1]=L.r[0]; //插入到正确位置r.move ++;}}if(!flag){printf("本次随机数据排序的移动次数为:");printf("%d\n",r.move);printf("本次随机数据排序的比较次数为:");printf("%d\n",p);printf("直接插入排序后的结果:");visit(L);}else{num[2]=r.move;num[3]=p;}}void ShellInsert(SqList *L,int dk,Recode *r){ int i,j;for(i=dk+1;i<=L->length ;++i){ r->comp ++;if(L->r[i].key<L->r[i-1].key){ L->r[0]=L->r[i]; //暂存r->move ++;for(j=i-dk;j>0&&(L->r[0].key < L->r[j].key);j-=dk){ L->r[j+dk]=L->r[j]; //记录后移r->move ++;r->comp ++;}L->r[j+dk]=L->r[0]; //插入到正确位置r->move ++;}}}void ShellSort(SqList L,int dlta[],int t){ //按增量序列dlta[0..t-1]对顺序表L作希尔排序。
课程设计报告-内部排序算法的性能分析
目录内部排序算法的性能分析 (1)1 引言 (1)1.1设计背景 (1)1.2设计目的 (2)1.3设计内容 (2)1.4设计过程 (3)1.5编程环境 (3)2 系统功能分析 (3)2.1问题定义 (3)2.2可行性分析 (4)2.3需求分析 (4)3 总体设计 (5)3.1数据流程图 (5)3.2系统总体结构 (6)3.3文件组织结构 (6)3.4数据结构定义 (7)3.5函数接口说明 (8)3.6功能宏说明 (8)3.7性能比较方法 (9)4 详细设计 (10)4.1直接排序 (10)4.2起泡排序 (11)4.3选择排序 (11)4.4快速排序 (12)4.5希尔排序 (13)4.6堆排序 (13)4.7总结和实现 (14)5 系统实现及数据分析 (15)5.1系统实现 (15)5.2数据分析 (15)6 结束语 (18)参考文献 (19)程序清单 (20)内部排序算法的性能分析学生姓名:方山城指导老师:卢曼莎摘要在数据结构课程中,内部排序算法是相当重要的一部分,而在实际应用中,内部排序算法极大地影响着系统资源的分配。
在本文中,通过编码用C语言实现测试程序对常见的六种排序算法性能从比较次数、移动次数和消耗时间方面进行了对比,分析数据得出结论,为在实际应用中选择合适排序算法提供了实验依据。
关键词内部排序;性能;比较次数;移动次数;时间消耗1 引言1.1设计背景排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的、任意序列,重新排列成一个关键字有序序列。
在本学期的数据结构课程中,排序也是一个重要部分。
除了课程学习之外,排序也广泛应用于数据处理、情报检索、商业金融及企业管理等许多方面。
在计算机数据处理中,特别是在事务处理中,排序占了很大比重,一般认为有1/4的时间用在排序上,而对安装程序,多达50%的时间花费在对表的排序上[1].在本学期的数据结构课程[2]中,书上介绍的多种排序算法从算法原理,实现以及时间复杂度等方面进行了比较详细介绍,但对于各种算法的性能分析仅仅是停留在时间复杂度层面上,没有比较直观的对常见的六种排序算法性能的对比,所以,在学习过程中亟需通过实践设计深入的理解各种排序算法性能差异。
排序算法的设计与实现(内部排序算法)
《数据结构》实验报告实验内容:排序算法的设计与实现(内部排序算法)排序是计算机程序设计中的一种重要操作。
它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
内部排序算法主要分为5大类,有十二个算法。
插入排序类、交换排序类、选择排序类、归并排序类和基数排序类。
算法主要包括:插入排序、折半插入排序、选择排序、冒泡排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。
一、目的和要求(需求分析):1、理解和掌握各种排序算法的定义和基本思想;2、通过编程掌握设计各种排序算法的优点和区别;3、针对具体问题学会选择最佳排序算法进行设计与实现;4、重点掌握快速排序算法,并编程实现;二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等)存储结构采用顺序表的方式来实现,具体将一组记录放在地址连续的一组存储单元上,类似于线性表的书序存储结构,其记录中的关键字均为整数。
进行排序时采用快速排序的办法,附设两个指针low和high,他们的初值分别为low和high,设枢轴记录的关键字为pivotkey,则首先从high所指位置向前搜索到第一个关键字小于pivotkey的记录和枢轴记录互相交换,然后从low所指位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴记录互相交换,重复这两步直至low=high为止。
而实际上,在排序过程中对枢轴记录的赋值是多余的,因为只有在一趟排序结束时,即low=high的位置上才是枢轴记录的最后位置。
由此可以改写上述算法,先将枢轴记录暂存在r[0]的位置上,排序过程中只作r[low]或r[high]的单向移动,直至一趟排序结束后再将枢轴记录移至正确位置上。
此外排序采用递归的方式来加以实现。
输入相应链表元素的值,再进行相应操作,输出排序以后的结果。
三、调试和运行程序过程中产生的问题及采取的措施:由于在起初的设计中就将r[0]当作哨兵或者闲置用途,因为在后续的程序设计中就要注意r[0]是没有被赋值的,所以在程序设计中要在i=1的时候开始进行,而不能把i 的初值定位0。
排序算法课课程设计书
排序算法课课程设计书一、教学目标本节课的学习目标主要包括以下三个方面:1.知识目标:学生需要掌握排序算法的概念、原理和常见的排序算法(如冒泡排序、选择排序、插入排序等);理解排序算法的应用场景和性能特点,能够根据实际问题选择合适的排序算法。
2.技能目标:学生能够运用排序算法解决实际问题,具备编写排序算法代码的能力;能够对给定的数据集进行排序,并分析排序算法的执行时间和空间复杂度。
3.情感态度价值观目标:培养学生对计算机科学和算法的兴趣,使其认识算法在实际生活中的重要性,培养学生的创新意识和团队合作精神。
通过对本节课的学习,学生应能够了解排序算法的相关知识,掌握常见的排序算法,具备运用排序算法解决实际问题的能力,并培养对计算机科学和算法的兴趣。
二、教学内容本节课的教学内容主要包括以下几个部分:1.排序算法的概念和原理:介绍排序算法的定义、分类和性能评价指标。
2.常见排序算法:讲解冒泡排序、选择排序、插入排序等基本排序算法,并通过实例演示其实现过程。
3.排序算法的应用场景和性能特点:分析不同排序算法在实际应用中的优缺点,引导学生根据问题特点选择合适的排序算法。
4.排序算法的代码实现:让学生动手编写排序算法代码,培养其编程能力。
5.排序算法的执行时间和空间复杂度分析:讲解排序算法的时间复杂度、空间复杂度概念,并分析不同排序算法的复杂度。
通过对本节课的教学内容的学习,学生应能够掌握排序算法的相关知识,了解常见的排序算法,并具备运用排序算法解决实际问题的能力。
三、教学方法为了提高教学效果,本节课将采用以下教学方法:1.讲授法:教师讲解排序算法的相关概念、原理和算法实现,引导学生掌握排序算法的基本知识。
2.案例分析法:通过分析实际应用场景,让学生了解排序算法的应用价值和性能特点。
3.实验法:让学生动手编写排序算法代码,培养其编程能力和实际操作能力。
4.讨论法:分组讨论排序算法的优缺点,引导学生学会分析问题、解决问题。
课程设计内部排序算法
课程设计内部排序算法一、教学目标本课程旨在让学生掌握内部排序算法的原理和实现,包括冒泡排序、选择排序、插入排序等基本排序算法,以及快速排序、归并排序等高级排序算法。
通过学习,学生应能理解排序算法的时空复杂度,并能运用排序算法解决实际问题。
在技能目标方面,学生应掌握内部排序算法的编程实现,能独立完成排序算法的代码编写和调试。
在情感态度价值观目标方面,学生应培养对计算机科学和编程的兴趣,树立正确的计算机伦理观念,注重算法效率和代码质量。
二、教学内容本课程的教学内容主要包括内部排序算法的原理和实现。
首先,介绍排序的概念和排序算法的分类,让学生了解排序算法在计算机科学中的应用。
然后,讲解冒泡排序、选择排序、插入排序等基本排序算法的原理和实现,让学生通过编程实践掌握这些排序算法的具体实现。
接着,介绍快速排序、归并排序等高级排序算法,分析它们的时空复杂度,并通过编程实践让学生掌握这些排序算法的实现。
最后,结合实际问题,让学生运用排序算法解决问题,培养学生的实际应用能力。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
首先,采用讲授法,讲解排序算法的原理和实现。
其次,采用讨论法,让学生分组讨论排序算法的优缺点,并对比不同排序算法的性能。
再次,采用案例分析法,分析实际问题,让学生学会运用排序算法解决问题。
最后,采用实验法,让学生动手编程实现排序算法,培养学生的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源。
首先,教材《数据结构与算法》,作为学生学习的基础资料。
其次,参考书《排序与搜索》,为学生提供更多的学习资料。
再次,多媒体资料,包括教学PPT、视频教程等,为学生提供直观的学习材料。
最后,实验设备,包括计算机、网络等,为学生提供动手实践的场所和工具。
五、教学评估本课程的教学评估将包括平时表现、作业和考试三个部分,以全面客观地评价学生的学习成果。
关于内部排序课程设计
关于内部排序课程设计一、课程目标知识目标:1. 学生理解内部排序的基本概念,掌握冒泡排序、选择排序、插入排序等常见排序算法的原理与实现。
2. 学生了解排序算法的时间复杂度和空间复杂度,能够分析不同排序算法的优缺点。
3. 学生掌握如何根据实际问题选择合适的排序算法。
技能目标:1. 学生能够运用所学排序算法编写程序,解决实际问题。
2. 学生通过分析排序算法,培养逻辑思维和问题解决能力。
3. 学生学会使用可视化工具辅助分析排序算法的过程,提高编程实践能力。
情感态度价值观目标:1. 学生培养对计算机科学的兴趣,激发学习编程的热情。
2. 学生通过合作学习,培养团队协作精神和沟通能力。
3. 学生在解决问题的过程中,树立正确的价值观,认识到算法在实际应用中的重要性。
课程性质:本课程属于计算机科学领域,旨在帮助学生掌握内部排序的基本原理和方法,提高编程实践能力。
学生特点:六年级学生具备一定的逻辑思维能力,对编程有一定的基础,好奇心强,喜欢探索新知识。
教学要求:教师应注重启发式教学,引导学生通过实践、讨论与合作学习,将理论知识与实际应用相结合,提高学生的编程素养。
同时,关注学生的情感态度价值观的培养,激发学生的学习兴趣。
通过分解课程目标,为教学设计和评估提供具体依据。
二、教学内容1. 内部排序概念:介绍排序的定义、分类及内部排序的特点。
- 教材章节:第3章排序与查找,第1节排序的基本概念。
2. 常见内部排序算法:- 冒泡排序:原理、实现步骤、优化方法。
- 教材章节:第3章排序与查找,第2节冒泡排序。
- 选择排序:原理、实现步骤、优缺点。
- 教材章节:第3章排序与查找,第3节选择排序。
- 插入排序:原理、实现步骤、优缺点。
- 教材章节:第3章排序与查找,第4节插入排序。
3. 排序算法的时间复杂度和空间复杂度分析:- 介绍时间复杂度和空间复杂度的概念,分析常见排序算法的复杂度。
- 教材章节:第3章排序与查找,第5节排序算法的复杂性分析。
排序方法课程设计
排序方法课程设计一、课程目标知识目标:1. 学生能理解排序方法的基本概念,掌握冒泡排序、选择排序和插入排序的原理与步骤。
2. 学生能运用所学排序方法解决实际问题,分析排序算法的时间复杂度和空间复杂度。
3. 学生了解排序在计算机科学中的应用,认识到排序方法在不同场景下的优缺点。
技能目标:1. 学生能够编写简单的排序算法程序,对给定数据进行排序。
2. 学生能够通过分析问题,选择合适的排序方法进行数据处理。
3. 学生能够运用所学知识解决实际生活中的排序问题,提高解决问题的能力。
情感态度价值观目标:1. 学生通过学习排序方法,培养逻辑思维能力和编程兴趣。
2. 学生在合作学习中,培养团队协作精神和沟通能力。
3. 学生认识到排序在生活中的重要性,提高对计算机科学的认识和兴趣。
分析课程性质、学生特点和教学要求,本课程旨在帮助学生掌握基本的排序方法,培养编程兴趣和解决问题的能力。
课程目标具体、可衡量,便于教学设计和评估。
在教学过程中,注重理论与实践相结合,提高学生的实际操作能力。
同时,关注学生的情感态度价值观培养,使他们在学习过程中形成积极的学习态度和价值观。
二、教学内容本章节教学内容主要包括以下三个方面:1. 排序方法基本概念与原理- 排序的定义、分类及作用- 冒泡排序、选择排序和插入排序的原理与步骤- 排序算法的时间复杂度和空间复杂度分析2. 排序方法的编程实现与应用- 编写冒泡排序、选择排序和插入排序的代码- 分析排序算法在不同场景下的性能表现- 实际应用案例:对一组数据进行排序处理3. 排序方法的拓展与优化- 了解其他排序方法(如:快速排序、归并排序等)的原理及优缺点- 探讨排序算法的优化方法,如:减少交换次数、提高效率等- 分析排序算法在实际应用中的局限性及改进方向教学内容按照教学大纲安排,结合教材相关章节进行组织。
在教学过程中,注重理论与实践相结合,引导学生通过编程实践,深入理解排序方法的原理与应用。
课程设计内部排序算法
课程设计内部排序算法一、教学目标本章节的教学目标是让学生掌握内部排序算法的原理和实现方法,培养学生运用算法解决问题的能力。
具体目标如下:1.知识目标:(1)了解内部排序算法的概念和分类。
(2)掌握常用内部排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理和实现。
(3)了解内部排序算法的性能分析及应用场景。
2.技能目标:(1)能够运用内部排序算法解决实际问题。
(2)能够对给定的排序算法进行优化和改进。
(3)具备编程实现内部排序算法的能力。
3.情感态度价值观目标:(1)培养学生对算法学习的兴趣和自信心。
(2)培养学生团队合作、自主探究的学习精神。
(3)培养学生关注算法在实际应用中的价值,提高解决问题的能力。
二、教学内容本章节的教学内容主要包括以下几个部分:1.内部排序算法的概念和分类。
2.常用内部排序算法的原理和实现(冒泡排序、选择排序、插入排序、快速排序等)。
3.内部排序算法的性能分析及应用场景。
4.内部排序算法在实际问题中的应用案例。
三、教学方法为了提高教学效果,本章节将采用以下教学方法:1.讲授法:讲解内部排序算法的原理和实现方法。
2.案例分析法:分析实际问题,引导学生运用内部排序算法解决问题。
3.实验法:让学生动手编程实现内部排序算法,提高实际操作能力。
4.讨论法:分组讨论,引导学生思考内部排序算法的优化和改进。
四、教学资源为了支持教学内容和教学方法的实施,本章节将准备以下教学资源:1.教材:《数据结构与算法》等相关教材。
2.参考书:《算法导论》、《排序与搜索》等。
3.多媒体资料:内部排序算法的动画演示、教学视频等。
4.实验设备:计算机、编程环境等。
五、教学评估本章节的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和课堂表现。
2.作业:布置相关的编程练习和算法分析作业,评估学生的理解和应用能力。
数据结构课程设计报告内部排序的算法设计与分析
课程设计任务书题目常用内部排序算法分析与比较专业、班级计算机科学与技术10-02班学号姓名主要内容:分析直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序等常用的内部排序算法的思想,通过交换次数以及比较次数来对这些算法进行比较。
基本要求:通过给定的记录数目及排序思想,设计相应的存储结构,程序之中要求可以实现完全随机,部分逆序等测试数据,来对每一种排序算法进行验证。
其次还要设计出一个统计交换次数和比较次数的函数来进行计数。
从待排序的记录数目、记录大小、关键字结构及其对稳定性的要求讨论出每种算法使用的环境。
主要参考资料:严蔚敏吴伟民数据结构(C语言版)清华大学出版社完成期限:2012/6/21指导教师签名:课程负责人签名:2012年 6月 21 日一、设计题目:常用的内部排序的算法分析和比较二、运行环境:操作系统:Windows软件:Visual C++ 6.0三、设计目的:针对常见的计算机内部排序算法,如直接插入排序、希尔排序、冒泡排序、简单选择排序、堆排序、归并排序、基数排序等,通过是自己设计的程序,借助排序中交换次数和比较次数来比较这些算法的适用范围。
四、程序设计的流程图:五、算法分析:1、简单选择排序:简单选择排序的每一趟都是从待排的数据元素中选出一个最小(最大)的一个元素,顺序的放在已经排好的数列的最后,直到全部待排序的数据元素排序完毕。
2、直接插入排序:这是一种最简单的排序方法,它的基本操作时将一个记录插入到一个已经排好序的有序表中,从而得到一个新的记录数增1的有序表。
其效率:从空间的角度来看待,它只需要一个辅助的空间,从时间上来看的话,排序的基本操作是比较两个关键字的大小和移动(本程序中将移动和交换看成一样)记录。
在整个排序的过程中,当待排序列中的关键字非递减有序的话,那么比较次数最小n-1,且不需要移动,当待排序列逆序时,比较次数达到最大(n+2)(n-1)/2,记录的移动的次数也达到最大值(n+4)(n-1)/2。
内部排序算法的实现与比较-数据结构课程设计
内部排序算法的实现与⽐较-数据结构课程设计内部排序算法的实现与⽐较1)问题描述在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执⾏时间的阶,或⼤概执⾏时间。
试通过随机数据⽐较各算法的关键字⽐较次数和关键字移动次数,以取得直观感受。
2)基本要求(1) 对常⽤的内部排序算法进⾏⽐较:直接插⼊排序、简单选择排序、冒泡排序、快速排序、希尔排序、归并排序。
(2) 利⽤随机函数产⽣N(N=30000)个随机整数,作为输⼊数据作⽐较;⽐较的指标为关键字参加的⽐较次数和关键字的移动次数(关键字交换计为3次移动)。
(3) 对结果作出简要分析。
3)测试数据随机函数产⽣。
4)提⽰主要⼯作是设法在已知算法中适当位置插⼊对关键字的⽐较次数和移动次数的计数操作。
注意采⽤分块调试的⽅法。
5)输⼊输出:输⼊数据:参加排序的整数个数N(N=30000,注:不得减少N);输出数据:各种排序⽅法的关键字⽐较次数和移动次数(从⼩到⼤排列)。
本来冒泡排序交换次数想⽤树状数组BIT发现数据太多时 ⽤BIT加的数据会超限 所以还是直接⽤了冒泡排序上代码--纯C语⾔:/** zhagoodwell 查昊昊QQ微信:2423824433* 直接插⼊: charu函数* 选择: xuanzepai函数* 冒泡: maopao函数* 快排: Qsort 递归函数* 希尔:shell 函数* 归并:GB 函数*/# include <stdio.h># include <stdlib.h># include <time.h># define N 30000# define SR 1001int A[N],B[N],C[N],D[N],E[N],F[N],G[N];int a,aa,b,bb,d,dd,e,ee,f,ff,num; //单个字母的为记录的⽐较次数-移动的次数,双字母为关键字的移动次数long long c,cc;void charu(int A[],int n);//对n个元素直接插⼊排序void xuanzepai(int A[],int n);//对n个元素选择升序void maopao(int A[],int n); // 冒泡排序void Quicksort(int A[],int L,int R);//对[L,R]个元素快速升序void shell(int A[],int n);//对n个元素 shell 升序void GBPX(int S[],int L,int R,int T[]);// 归并排序int GB(int S[],int L,int M,int R,int T[]);//数组归并操作int gainint(int *p,int min,int max);//防输错⽽建的函数 *p的范围[min,max]int change(int *a,int *b);//交换函数交换a b的值void charu(int A[],int n)//返回循环⽐较次数int i,j,temp;for (i=1,a++;i<n;i++,a++)if (A[i]<A[i-1]){temp=A[i];for(a++,aa++,j=i-1;j>=0&& A[j]>temp;j--,a++,aa++) A[j+1]=A[j];A[j+1]=temp;}}void xuanzepai(int A[],int n)//以A[0]为⽐较依据升序{int i,j,k;for(i=0,b++;i<n-1;i++,b++){k=i;for(j=i+1,b++;j<n;j++,b++)if(A[j]<A[k]){ k=j;b++;}if(k!=i){bb+=change(&A[i],&A[k]);}}}void maopao(int A[],int n){int i,j;for (i = n -1 ; i>=0 ;i--){for (j = 0; j<i; j++){if(A[j]>A[j+1])cc+=change(&A[j],&A[j+1]);}}}void Quicksort(int A[],int L,int R)//快速排序升序{int i=L,j=R,T=A[L]; //T为基准数if(L>R) return;while(i!=j) //当数组左右两边没相遇{while(A[j]>=T&&i<j){j--;d++;} //从右向左找while(A[i]<=T&&i<j){i++;d++;} //从左向右找if(i<j)dd+=change(&A[i],&A[j]); //交换两数}if(L!=i)dd+=change(&A[L],&A[i]); //基准数归位Quicksort(A,L,i-1); //递归左Quicksort(A,i+1,R); //递归右}void shell(int A[],int n)//希尔排序增量为2{int i,j,k;for(k=n>>1,e++;k>0;k=k>>1,e++){for(i=k,e++;i<n;i++,e++){for(j=i-k,e++;j>=0;j-=k,e++)if(A[j]>A[j+k])ee+=change(&A[j],&A[j+k]);}}int GB(int S[],int L,int M,int R,int T[])//数组归并操作{int i=M,j=R,k=0,count=0;while(i>=L&&j>M){f++;if(S[i]>S[j]){T[k++]=S[i--];//从临时数组的最后⼀个位置开始排序}else T[k++]=S[j--];count++;}while(i>=L){f++;T[k++]=S[i--];} //若前半段数组还有元素未放⼊临时数组T中while(j>M){f++;T[k++]=S[j--];}for(i=0,f+=k;i<k;i++) S[R-i]=T[i];//写回原数组return count;}void GBPX(int S[],int L,int R,int T[]){int M;if(L<R){M=(L+R)>>1;GBPX(S,L,M,T);//找左半段的逆序对数⽬GBPX(S,M+1,R,T);//找右半段的逆序对数⽬ff+=GB(S,L,M,R,T);//找完左右半段逆序对以后两段数组有序,找两段之间的逆序对。
六种内部排序课程设计
六种内部排序课程设计一、课程目标知识目标:1. 理解并掌握六种内部排序算法的基本原理和实现方法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和希尔排序。
2. 学会分析各种排序算法的时间复杂度和空间复杂度,能对其进行比较和评价。
3. 了解排序算法在实际应用中的优势和局限,能根据具体问题选择合适的排序算法。
技能目标:1. 能运用编程语言(如C/C++、Java等)实现六种内部排序算法,并解决实际问题。
2. 培养良好的编程习惯,提高代码编写能力和调试技巧。
3. 学会通过分析算法性能,优化程序,提高程序运行效率。
情感态度价值观目标:1. 培养学生对算法学习的兴趣和热情,激发主动探究精神。
2. 培养学生的团队合作意识,学会在团队中发挥个人优势,共同解决问题。
3. 增强学生的自信心,使其在面对复杂问题时,勇于尝试,不断进步。
课程性质分析:本课程属于计算机科学领域,涉及算法与数据结构的知识。
课程内容具有一定的理论性和实践性,要求学生在理解基本概念的基础上,通过实际操作加深对排序算法的理解。
学生特点分析:考虑到学生所在年级,已具备一定的编程基础和数学知识,但可能对算法的认识尚浅。
因此,课程设计需兼顾基础知识的巩固和拓展,以激发学生的学习兴趣。
教学要求:1. 注重理论与实践相结合,让学生在动手实践中掌握排序算法。
2. 逐步引导学生从浅入深地学习,培养其独立思考和解决问题的能力。
3. 关注学生的学习进度和反馈,及时调整教学策略,确保教学效果。
二、教学内容1. 排序算法基本概念:介绍排序的定义、分类及内部排序与外部排序的区别。
2. 冒泡排序:讲解冒泡排序的原理、实现步骤,分析其时间复杂度和空间复杂度。
教材章节:第3章第1节。
3. 选择排序:介绍选择排序的基本思想、实现方法,分析其时间复杂度和空间复杂度。
教材章节:第3章第2节。
4. 插入排序:讲解插入排序的原理、实现步骤,分析其时间复杂度和空间复杂度。
教材章节:第3章第3节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1、问题描述: (2)1.1题目内容: (2)1.2基本要求: (2)1.3测试数据: (2)2、需求分析: (2)2.1程序的基本功能: (2)2.2输入值、输出值以及输入输出形式: (2)2.3各个模块的功能要求: (2)3、概要设计: (3)3.1所需的ADT,每个程序中使用的存储结构设计说明 (3)3.2主程序流程以及模块调用关系 (3)3.3每个模块的算法设计说明(流程图) (4)3.3.1气泡排序: (4)3.3.2直插排序 (5)3.3.3选择排序 (6)3.3.4希尔排序 (7)3.3.5快速排序 (8)4、详细设计: (9)4.1函数调用关系图 (9)5、各个算法实现的源程序: (9)5.1、冒泡排序及其主要算法 (9)5.2、直接插入排序及其主要算法 (10)5.3、选择排序及其主要算法 (10)5.4、希尔排序及其主要算法 (11)6、调试分析: (12)7、使用说明: (13)8、测试结果: (14)9、主要参考文献 (14)1、问题描述:1.1题目内容:内部排序算法实现与性能分析1.2基本要求:(1)数据结构定义(2)利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、希尔等排序方法进行排序,并统计每一种排序上机所花费的时间,对各种排序算法做分析比较.1.3测试数据:由函数随机产生的数据,由于是随机产生的,所以在此不一一写出。
2、需求分析:2.1程序的基本功能:输入30000个随机整数,对这些数进行多种方法进行排序,并对这些排序做比较,在屏幕上输出每种排序方法所比较的次数,交换的次数,和时间复杂度。
2.2输入值、输出值以及输入输出形式:由于程序中所需的数据都是有函数随机生成的整形数,不需要用户自己输入,用户只需要对演示程序中的一些提示做一些必要的选择以便于程序的执行。
程序输出的是对六种排序做的一些比较,即输出六种排序各排序过程中所比较的数据的个数,交换的数据的次数,和排序完成所用的时间。
六种排序依次在计算机终端上显示,便于用户观察。
2.3各个模块的功能要求:一、随机函数:产生随机数二、选择排序函数:对随机数进行选择排序三、起泡排序函数:对随机数进行气泡排序四、直接插入函数:对随机数进行直接插入排序五、希尔排序函数:对随机数进行希尔排序六、快速排序函数:对随机数进行快速排序七、主函数3、概要设计:3.1所需的ADT,每个程序中使用的存储结构设计说明typedef struct{int key;}ElemType;//元素类型typedef struct{ElemType *elem;int length;}SqList;//顺序表类型3.2主程序流程以及模块调用关系主函数main()初始化变量x,i;; 初始化线性表SqListL;Showthe menu显示主界面五种排序运行后打印结果五种排序用时的比较,不打印排序后的结果3.3每个模块的算法设计说明(流程图)3.3.1气泡排序:开始初始变量 i=1,j=1i 小于L.lengthj 小于L.lengthL.elem[j].key 大于L.elem[j+1].key交换第j 个和第j+1个元素j++YYY结束N开始初始变量i=2,ji<=L.lengt hY如果第i位比第i-1位的值小L.elem[0].key=L.elem[i].keyYj=i-1NN如果第0位比第j位的值小记录后移j=j-1L.elem[j+1].key=L.elem[0].keyY结束开始初始变量i=1,j,kI<lengthJ=i+1Y如果i位置上的值<=k位置上的交换数值位置Yj=j+1i=i+1结束N N开始Y结束N初始化变量 i,d=L.length/2,j,w=0w 小于di=1,i 小于L.length j=i+dJ 小于L.length第i 个元素大于第j 个元素交换第i 个元素第j 个元素d 变为原来的一半YYY开始结束NY Y初始化变量pivotkey,low,highLow小于high第high个元素大于pivotkey 第low个元素小于pivotkey第low个元素与第high个元素交换第high个元素与第low个元素交换high-- Low++Y4、详细设计:4.1函数调用关系图5、各个算法实现的源程序:5.1、冒泡排序及其主要算法void qipao(SqList &L)//起泡 {start_t=clock(); int i=1,j;while(i<L.length) {for(j=1;j<L.length;j++) {if(L.elem[j].key>L.elem[j+1].key) {L.elem[0].key=L.elem[j].key; L.elem[j].key=L.elem[j+1].key; L.elem[j+1].key=L.elem[0].key; }开始界面各排序输出结果 起泡 排 序 直插 排 序 选择 排 序 希尔排 序 快速 排 序各种排序用时比较起泡 排 序 用时 直插 排 序 用时 选择 排 序 用时 希尔 排 序 用时 快速 排 序 用时}i++;}5.2、直接插入排序及其主要算法void InsertSort(SqList &L) //直接插入{start_t=clock();int i,j;for(i=2;i<=L.length;i++){if(L.elem[i].key<=L.elem[i-1].key)//“<”,需将L.r[i]插入有序子序列{L.elem[0].key=L.elem[i].key; //复制为哨兵j=i-1;while(L.elem[0].key<L.elem[j].key){L.elem[j+1].key=L.elem[j].key; //记录后移j--;}L.elem[j+1].key=L.elem[0].key; //插入到正确位置}}5.3、选择排序及其主要算法void SelectSort(SqList &L)//选择{int i,j,k,;for(i=1;i<L.length;i++)//选择第i小的记录,并交换到位{for(j=i+1;j<L.length;j++){if(L.elem[j].key<=L.elem[k].key){L.elem[0].key=L.elem[i].key;L.elem[i].key=L.elem[k].key;L.elem[k].key=L.elem[0].key;//与第i个记录交换}}5.4、希尔排序及其主要算法void xier(SqList &L)//希尔排序并打印结果{start_t=clock();int i,d=L.length/2,j,w=0,k,yd=0,bj=0; //间长为dwhile(w<d){for(i=1;i<=L.length;i++) //第i个与第i+d个相比较{j=i+d;if(j<=L.length){if(L.elem[i].key>L.elem[j].key){k=j;bj++;if(i!=k){L.elem[0].key=L.elem[i].key;L.elem[i].key=L.elem[k].key;L.elem[k].key=L.elem[0].key;}}}}d=d/2;//间隔变为原来的一半}5.5、快速排序及其主要算法int Partition(SqList &L,int low,int high)//快速排序{int pivotkey;L.elem[0]=L.elem[low];yd1++;pivotkey=L.elem[low].key; //用子表的第一个记录作曲轴记录while (low<high) //从子表的两端交替的向中间扫描{yd1++;while(low<high&&L.elem[high].key>=pivotkey)--high;L.elem[low]=L.elem[high]; //将比轴记录小的记录交换到低端while (low<high&&L.elem[low].key<=pivotkey)L.elem[high]=L.elem[low]; //将比轴记录大的记录交换到高端}L.elem[low]=L.elem[0];return low; //返回曲轴所在位置}void QSort(SqList &L,int low,int high){ //对顺序表L.r[low..high]做快速排序int pivotloc;int i=1;if(low<high) //长度大于一{pivotloc=Partition(L,low,high);//将L.r[low..high]一分为二QSort(L,low,pivotloc-1); //对低字表递归排序QSort(L,pivotloc+1,high); //对高字表递归排序}}void QuickSort(SqList &L){ //对顺序表L做快速排序int j;BeforeSort();QSort(L,1,L.length);for(j=1;j<=L.length;j++)printf("%d ",L.elem[j]);display(yd1,bj1);}6、调试分析:1.产生随机数2.排序3.汇总7、使用说明:本演示程序对以下5种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序。
由系统生成30000个随机整数进行比较。
程序还可以考虑几组数据的典型性,如:正序、逆序和不同程度的乱序。
注意采用分块调试的方法。
在该程序中可能回有很多让人不满意的地方,我会在以后的学习中逐加改进的。
8、测试结果:9.主要参考文献1.严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997 2.朱战立.数据结构.西安:西安电子科技大学出版社,20043.严蔚敏,吴伟民.数据结构题集(C语言版).北京:清华大学出版社,2000。