排序算法课程设计

合集下载

查找排序算法课程设计

查找排序算法课程设计

查找 排序算法课程设计一、课程目标知识目标:1. 让学生掌握查找和排序算法的基本概念,理解各种算法的原理和实现方式。

2. 使学生了解查找和排序算法在计算机科学中的应用和重要性。

3. 帮助学生理解算法效率的评价标准,能够分析不同算法的时间复杂度和空间复杂度。

技能目标:1. 培养学生运用查找算法解决实际问题的能力,如二分查找、顺序查找等。

2. 培养学生运用排序算法对数据进行整理的能力,如冒泡排序、选择排序、插入排序等。

3. 培养学生通过编程实践来验证查找和排序算法的正确性及效率。

情感态度价值观目标:1. 激发学生对计算机科学的兴趣,培养其主动探索和学习的精神。

2. 培养学生的团队协作意识,使其在合作中共同进步,互相学习。

3. 培养学生具备良好的程序设计习惯,注重代码规范,提高编程素养。

本课程针对初中年级学生,结合课程性质、学生特点和教学要求,将目标分解为具体的学习成果。

通过本课程的学习,使学生能够:1. 独立编写查找和排序算法的代码,实现数据查找和排序功能。

2. 分析实际问题的查找和排序需求,选择合适的算法进行解决。

3. 评估查找和排序算法的效率,了解其在解决实际问题中的应用价值。

4. 养成良好的编程习惯,具备一定的编程素养和团队协作能力。

二、教学内容本章节教学内容主要包括以下三个方面:1. 查找算法:- 顺序查找:理解顺序查找的基本原理,掌握其实现方法。

- 二分查找:掌握二分查找的条件和实现步骤,了解其时间复杂度。

2. 排序算法:- 冒泡排序:学习冒泡排序的原理,编写代码实现排序功能。

- 选择排序:掌握选择排序的方法,分析其时间复杂度。

- 插入排序:理解插入排序的思想,学会编写插入排序的代码。

3. 算法分析与评价:- 时间复杂度与空间复杂度:学习算法效率的评价标准,分析查找和排序算法的时间复杂度和空间复杂度。

- 算法优化:探讨如何优化查找和排序算法,提高其效率。

教学内容安排和进度:1. 课时1:查找算法原理及实现(顺序查找、二分查找)。

排序算法分析课程设计

排序算法分析课程设计

排序算法分析课程设计一、课程目标知识目标:1. 理解排序算法的基本概念和分类;2. 掌握冒泡排序、选择排序和插入排序的原理及实现步骤;3. 了解不同排序算法的时间复杂度和空间复杂度;4. 能够分析实际问题,选择合适的排序算法解决问题。

技能目标:1. 能够运用编程语言实现冒泡排序、选择排序和插入排序;2. 能够通过对比分析,评估不同排序算法的性能;3. 能够运用所学知识解决实际生活中的排序问题。

情感态度价值观目标:1. 培养学生对算法学习的兴趣和积极性;2. 培养学生的团队合作意识和解决问题的能力;3. 增强学生对计算机科学的认识,提高信息素养。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为计算机科学领域的基础课程,排序算法是算法设计与分析的重要部分,具有实际应用价值;2. 学生特点:五年级学生,具备一定的编程基础和逻辑思维能力,对新鲜事物充满好奇心;3. 教学要求:结合实际案例,以学生为主体,注重启发式教学,培养学生的实践能力和创新精神。

二、教学内容1. 排序算法基本概念:介绍排序算法的定义、作用和分类;- 教材章节:第二章第二节;- 内容列举:排序算法的定义、分类及其应用场景。

2. 冒泡排序:讲解冒泡排序的原理、实现步骤及优化方法;- 教材章节:第三章第一节;- 内容列举:冒泡排序的基本思想、实现过程、时间复杂度及优化。

3. 选择排序:介绍选择排序的原理、实现步骤及性能分析;- 教材章节:第三章第二节;- 内容列举:选择排序的基本思想、实现过程、时间复杂度及优缺点。

4. 插入排序:讲解插入排序的原理、实现步骤及性能分析;- 教材章节:第三章第三节;- 内容列举:插入排序的基本思想、实现过程、时间复杂度及优缺点。

5. 排序算法对比分析:分析冒泡排序、选择排序和插入排序的优缺点,探讨在不同场景下如何选择合适的排序算法;- 教材章节:第三章第四节;- 内容列举:排序算法的性能比较、适用场景及选择策略。

排序算法问题课程设计

排序算法问题课程设计

排序算法问题课程设计一、课程目标知识目标:1. 理解排序算法的基本概念,掌握冒泡排序、选择排序、插入排序等常见排序算法的原理和步骤。

2. 能够分析不同排序算法的时间复杂度和空间复杂度,理解其适用场景。

3. 了解排序算法在实际问题中的应用,如查找最大(小)元素、数据去重、有序数组合并等。

技能目标:1. 能够运用所学排序算法解决实际问题,编写相应的程序代码,并进行调试与优化。

2. 培养良好的编程习惯,提高代码的可读性和可维护性。

3. 学会通过分析问题特点,选择合适的排序算法,提高解决问题的效率。

情感态度价值观目标:1. 培养学生对算法学习的兴趣,激发他们主动探索排序算法的优缺点和改进方向的热情。

2. 培养学生的团队协作精神,学会在合作中交流、分享、共同解决问题。

3. 培养学生面对问题时的耐心和毅力,养成良好的学习习惯,形成积极向上的学习态度。

本课程设计针对初中或高中年级学生,结合计算机科学课程中的排序算法部分,注重理论与实践相结合。

课程性质为理论课与实践课相结合,通过讲解、示例、实践等教学手段,使学生掌握排序算法的基本知识,提高编程能力和问题解决能力。

根据学生特点和教学要求,课程目标具体、可衡量,有利于教师进行教学设计和评估。

将目标分解为具体学习成果,有助于学生明确学习目标,提高学习效果。

二、教学内容1. 排序算法基本概念:介绍排序算法的定义、作用和分类,结合教材相关章节,让学生了解排序在计算机科学中的重要性。

2. 常见排序算法原理与步骤:- 冒泡排序:讲解冒泡排序的原理、步骤,分析其时间复杂度和空间复杂度。

- 选择排序:介绍选择排序的原理、步骤,分析其时间复杂度和空间复杂度。

- 插入排序:讲解插入排序的原理、步骤,分析其时间复杂度和空间复杂度。

3. 排序算法的应用场景:结合实际案例,分析不同排序算法在实际问题中的应用,如排序数组查找、有序数组合并等。

4. 排序算法的时间复杂度和空间复杂度分析:讲解如何分析排序算法的复杂度,并通过实例加深理解。

各种排序算法的课程设计

各种排序算法的课程设计

各种排序算法的课程设计一、课程目标知识目标:1. 让学生掌握排序算法的基本概念,了解不同排序算法的优缺点及应用场景。

2. 使学生能够理解和掌握冒泡排序、选择排序、插入排序等基本排序算法的原理和实现方法。

3. 帮助学生理解排序算法的时间复杂度和空间复杂度,并能够分析不同算法的效率。

技能目标:1. 培养学生运用编程语言实现排序算法的能力,提高编程实践操作技能。

2. 培养学生通过分析问题,选择合适的排序算法解决实际问题的能力。

情感态度价值观目标:1. 激发学生对计算机科学和算法的兴趣,培养主动探究和自主学习的精神。

2. 培养学生面对问题时的耐心和细心,提高解决问题的信心和团队合作意识。

3. 使学生认识到排序算法在生活中的广泛应用,体会算法对人类社会的贡献。

课程性质分析:本课程为计算机科学相关学科,旨在让学生掌握排序算法的基本原理和实现方法,提高编程实践能力。

学生特点分析:学生处于年级中段,具有一定的编程基础和逻辑思维能力,对新鲜事物充满好奇心,但学习耐心和自律性有待提高。

教学要求:1. 注重理论与实践相结合,提高学生的实际操作能力。

2. 通过案例分析,引导学生主动思考,提高问题解决能力。

3. 创设互动、轻松的学习氛围,关注学生个体差异,激发学习兴趣。

二、教学内容1. 排序算法基本概念:介绍排序的定义、排序算法的稳定性、内排序与外排序的分类。

2. 冒泡排序:讲解冒泡排序的原理、实现步骤,分析其时间复杂度和空间复杂度。

3. 选择排序:介绍选择排序的原理、实现步骤,分析其时间复杂度和空间复杂度。

4. 插入排序:讲解插入排序的原理、实现步骤,分析其时间复杂度和空间复杂度。

5. 排序算法比较:对比冒泡排序、选择排序和插入排序的优缺点,探讨在不同场景下如何选择合适的排序算法。

6. 教学案例:结合实际案例,让学生动手实践排序算法,提高编程能力。

7. 排序算法拓展:简要介绍其他常用排序算法(如快速排序、归并排序等)的原理和应用。

排序算法课课程设计书

排序算法课课程设计书

排序算法课课程设计书一、教学目标本节课的学习目标主要包括以下三个方面:1.知识目标:学生需要掌握排序算法的概念、原理和常见的排序算法(如冒泡排序、选择排序、插入排序等);理解排序算法的应用场景和性能特点,能够根据实际问题选择合适的排序算法。

2.技能目标:学生能够运用排序算法解决实际问题,具备编写排序算法代码的能力;能够对给定的数据集进行排序,并分析排序算法的执行时间和空间复杂度。

3.情感态度价值观目标:培养学生对计算机科学和算法的兴趣,使其认识算法在实际生活中的重要性,培养学生的创新意识和团队合作精神。

通过对本节课的学习,学生应能够了解排序算法的相关知识,掌握常见的排序算法,具备运用排序算法解决实际问题的能力,并培养对计算机科学和算法的兴趣。

二、教学内容本节课的教学内容主要包括以下几个部分:1.排序算法的概念和原理:介绍排序算法的定义、分类和性能评价指标。

2.常见排序算法:讲解冒泡排序、选择排序、插入排序等基本排序算法,并通过实例演示其实现过程。

3.排序算法的应用场景和性能特点:分析不同排序算法在实际应用中的优缺点,引导学生根据问题特点选择合适的排序算法。

4.排序算法的代码实现:让学生动手编写排序算法代码,培养其编程能力。

5.排序算法的执行时间和空间复杂度分析:讲解排序算法的时间复杂度、空间复杂度概念,并分析不同排序算法的复杂度。

通过对本节课的教学内容的学习,学生应能够掌握排序算法的相关知识,了解常见的排序算法,并具备运用排序算法解决实际问题的能力。

三、教学方法为了提高教学效果,本节课将采用以下教学方法:1.讲授法:教师讲解排序算法的相关概念、原理和算法实现,引导学生掌握排序算法的基本知识。

2.案例分析法:通过分析实际应用场景,让学生了解排序算法的应用价值和性能特点。

3.实验法:让学生动手编写排序算法代码,培养其编程能力和实际操作能力。

4.讨论法:分组讨论排序算法的优缺点,引导学生学会分析问题、解决问题。

课程设计排序和算法分析

课程设计排序和算法分析

课程设计排序和算法分析一、教学目标本课程旨在通过排序和算法分析的学习,让学生掌握排序算法的基本原理和实现方法,培养学生解决问题的能力,提高学生的逻辑思维和编程实践能力。

具体目标如下:1.理解排序算法的概念和作用。

2.掌握常见的排序算法(如冒泡排序、选择排序、插入排序等)的原理和实现。

3.理解算法分析的基本概念和方法。

4.能够运用排序算法解决实际问题。

5.能够分析算法的时间复杂度和空间复杂度。

6.能够运用编程语言实现排序算法。

情感态度价值观目标:1.培养学生对计算机科学的兴趣和热情。

2.培养学生解决问题的积极性和主动性。

3.培养学生团队合作的意识和能力。

二、教学内容本课程的教学内容主要包括排序算法、算法分析和编程实践。

具体安排如下:第1-2节:排序算法的概念和原理。

介绍排序算法的作用,讲解冒泡排序、选择排序和插入排序等常见排序算法的原理和实现。

第3-4节:算法分析的基本概念和方法。

介绍算法分析的目的,讲解时间复杂度和空间复杂度的概念和方法。

第5-6节:编程实践。

让学生运用所学的排序算法解决实际问题,培养学生的编程能力和解决问题的能力。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解排序算法的原理和实现,让学生掌握基本概念和知识。

2.讨论法:通过分组讨论,让学生深入理解排序算法的优缺点和适用场景。

3.案例分析法:通过分析实际问题,让学生学会运用排序算法解决实际问题。

4.实验法:通过编程实践,让学生掌握排序算法的编程实现和算法分析。

四、教学资源为了支持本课程的教学内容和教学方法,我们将选择和准备以下教学资源:1.教材:《数据结构与算法》。

2.参考书:《算法导论》、《排序算法与应用》等。

3.多媒体资料:PPT课件、教学视频等。

4.实验设备:计算机、编程环境等。

5.在线资源:相关论坛、博客、教程等。

五、教学评估本课程的教学评估将采用多元化的评估方式,以全面、客观、公正地评估学生的学习成果。

排序算法比较c语言课程设计

排序算法比较c语言课程设计

排序算法比较c语言课程设计一、教学目标本课程的教学目标是使学生掌握排序算法的原理和实现,能够运用C语言编写排序算法,并理解不同排序算法的性能和适用场景。

具体目标如下:1.知识目标:学生需要了解常见排序算法的原理和实现,包括冒泡排序、选择排序、插入排序、快速排序等。

2.技能目标:学生能够运用C语言编写排序算法,并能够分析代码的性能和优化空间。

3.情感态度价值观目标:学生通过实践操作和问题解决,培养编程思维和解决问题的能力,激发对计算机科学的兴趣和热情。

二、教学内容本课程的教学内容主要包括排序算法的原理和实现,以及C语言编程基础。

具体安排如下:1.排序算法的原理和实现:介绍冒泡排序、选择排序、插入排序、快速排序等常见排序算法的原理和实现方法。

2.C语言编程基础:介绍C语言的基本语法和编程方法,包括变量、数据类型、运算符、控制语句等。

3.排序算法的性能分析:分析不同排序算法的性能,包括时间复杂度和空间复杂度,并理解影响性能的因素。

三、教学方法本课程的教学方法包括讲授法、实践操作法和讨论法。

具体方法如下:1.讲授法:通过讲解排序算法的原理和实现方法,使学生掌握基本概念和理论知识。

2.实践操作法:通过编写C语言代码实现排序算法,使学生能够将理论知识应用到实际编程中。

3.讨论法:通过小组讨论和问题解决,培养学生的编程思维和解决问题的能力。

四、教学资源本课程的教学资源包括教材、编程环境和辅助教学工具。

具体资源如下:1.教材:选择一本与C语言编程和排序算法相关的教材,提供理论知识的学习和参考。

2.编程环境:提供C语言编程环境,如Visual Studio、Code::Blocks等,方便学生编写和调试代码。

3.辅助教学工具:提供编程实例和练习题,帮助学生巩固知识和提高编程能力。

以上是本课程的教学目标、教学内容、教学方法和教学资源的设计。

通过本课程的学习,希望学生能够掌握排序算法的原理和实现,提高编程能力,并培养解决问题的能力。

各种排序算法比较课程设计

各种排序算法比较课程设计

各种排序算法比较课程设计一、课程目标知识目标:1. 学生能理解并掌握冒泡排序、选择排序、插入排序等基本排序算法的原理与实现步骤。

2. 学生能够比较不同排序算法的时间复杂度和空间复杂度,并分析其优缺点。

3. 学生了解排序算法在实际应用中的重要性,能够举例说明。

技能目标:1. 学生能够运用编程语言(如Python、C++等)实现不同排序算法,并解决实际问题。

2. 学生具备分析排序算法性能的能力,能够根据实际问题选择合适的排序算法。

情感态度价值观目标:1. 学生对排序算法产生兴趣,认识到算法在计算机科学中的重要作用。

2. 学生通过合作学习,培养团队协作精神和沟通能力。

3. 学生在解决实际问题的过程中,培养勇于挑战、持续优化的精神。

课程性质:本课程为计算机科学领域的一门核心课程,旨在帮助学生掌握基本排序算法,提高编程能力和问题解决能力。

学生特点:六年级学生,已具备一定的编程基础,对算法有一定了解,但尚需深入学习和实践。

教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重实践操作和团队合作,以提高学生的编程能力和算法思维。

二、教学内容1. 冒泡排序:原理讲解,实现步骤,代码实践,性能分析。

- 课本章节:第三章第二节“冒泡排序”2. 选择排序:原理讲解,实现步骤,代码实践,性能分析。

- 课本章节:第三章第三节“选择排序”3. 插入排序:原理讲解,实现步骤,代码实践,性能分析。

- 课本章节:第三章第四节“插入排序”4. 排序算法比较:时间复杂度、空间复杂度分析,优缺点对比。

- 课本章节:第三章第五节“排序算法的比较与应用”教学进度安排:第一课时:冒泡排序原理讲解与代码实践。

第二课时:选择排序原理讲解与代码实践。

第三课时:插入排序原理讲解与代码实践。

第四课时:排序算法性能分析,优缺点对比,实际应用案例讨论。

教学内容确保科学性和系统性,结合课本章节,让学生在实践中掌握排序算法,并通过比较分析,深入理解排序算法的内涵。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

排序算法课程设计专业班级学号姓名指导老师一:课程设计的目的1.掌握各种排序的基本思想2.掌握各种排序的算法实现3.掌握各种排序的算法优劣分析花费的时间计算4.掌握各种排序算法所适用的不同场合。

二:课程设计的内容(1)冒泡、直插、选择、快速、希尔、归并、堆排序算法进行比较;(2)待排序的元素的关键字为整数。

其中的数据用伪随机产生程序产生(如10000个,1000个),再使用各种算法对其进行排序,记录其排序时间,再汇总比较;(3)将每次测试所用的时间,用条形图进行表示,以便比较各种排序的优劣。

三:课程设计的实现(1)直接插入排序#include <iostream.h>typedef int keytype;struct datatype{keytype key;};/* int rand(void);void srand(unsigned int seed );*/#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>void InsertSort (datatype a[], int n)//用直接插入法对a[0]--a[n-1]排序{int i, j;datatype temp;for(i=0; i<n-1; i++){temp = a[i+1];j = i;while(j > -1 && temp.key <= a[j].key){a[j+1] = a[j];j--;}a[j+1] = temp;}}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;InsertSort(num,n);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(2)希尔排序#include <iostream.h>/* int rand(void);void srand(unsigned int seed );*/#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>typedef int keytype;struct datatype{keytype key;};void ShellSort (datatype a[], int n, int d[], int numOfD)//用希尔排序法对记录a[0]--a[n-1]排序//各组内采用直接插入法排序{int i, j, k, m, span;datatype temp;for(m = 0; m < numOfD; m++){span = d[m];for(k = 0; k < span; k++){for(i = k; i < n-span; i = i+span){temp = a[i+span];j = i;while(j > -1 && temp.key <= a[j].key){a[j+span] = a[j];j = j-span;}a[j+span] = temp;}}}}void main(){/*srand((unsigned)time(NULL));// 随机种子*/ /*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000, d[]={1000,100,10,1},numOfd=4;ShellSort (num,n,d,numOfd);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(3)直接选择排序#include <iostream.h>typedef int keytype;struct datatype{keytype key;};/* int rand(void);void srand(unsigned int seed );*/#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>void SelectSort(datatype a[], int n)/*用直接选择排序法对a[0]--a[n-1]排序*/{int i, j, s;datatype temp;for(i=0; i < n-1; i++){s = i;for(j = i+1; j < n; j++)if(a[j].key < a[s].key) s=j;if(s != i){temp = a[i];a[i] = a[s];a[s] = temp;}}}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;SelectSort(num,n);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(4)堆排序#include <iostream.h>typedef int keytype;struct datatype{keytype key;};#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>void CreatHeap (datatype a[], int n, int h){int i, j, flag;datatype temp;i = h; // i为要建堆的二叉树根结点下标j = 2*i+1; // j为i的左孩子结点的下标temp = a[i];flag = 0;//沿左右孩子中值较大者重复向下筛选while(j < n && flag != 1){//寻找左右孩子结点中的较大者,j为其下标if(j < n-1 && a[j].key < a[j+1].key) j++;if(temp.key > a[j].key) //a[i].key>a[j].keyflag=1; //标记结束筛选条件else //否则把a[j]上移{a[i] = a[j];i = j;j = 2*i+1;}}a[i] = temp; //把最初的a[i]赋予最后的a[j]}void InitCreatHeap(datatype a[], int n){int i;for(i = (n-1)/2; i >= 0; i--)CreatHeap(a, n, i);}void HeapSort(datatype a[], int n){int i;datatype temp;InitCreatHeap(a, n); //初始化创建最大堆for(i = n-1; i > 0; i--) //当前最大堆个数每次递减1{//把堆顶a[0]元素和当前最大堆的最后一个元素交换temp = a[0];a[0] = a[i];a[i] = temp;CreatHeap(a, i, 0); //调整根结点满足最大堆}}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;HeapSort(num, n);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(5)冒泡排序#include <iostream.h>typedef int keytype;struct datatype{keytype key;};#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>void BubbleSort(datatype a[], int n)//用冒泡排序法对a[0]--a[n-1]排序{int i, j, flag=1;datatype temp;for(i = 1; i < n && flag == 1; i++){flag = 0;for(j = 0; j < n-i; j++){if(a[j].key > a[j+1].key){flag = 1;temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;BubbleSort(num, n);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(6)快速排序#include <iostream.h>/* int rand(void);void srand(unsigned int seed );*/#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>typedef int keytype;struct datatype{keytype key;};void QuickSort(datatype a[], int low, int high)//用递归方法对对象a[low]--a[high]进行快速排序{int i, j;datatype temp;i = low;j = high;temp = a[low];while(i < j){//在数组的右端扫描while(i < j && temp.key <= a[j].key) j--;if(i < j){a[i] = a[j];i++;}//在数组的左端扫描while(i < j && a[i].key < temp.key) i++;if(i < j){a[j] = a[i];j--;}}a[i] = temp;//对子对象数组进行递归快速排序if(low < i) QuickSort(a, low, i-1);if(i < high) QuickSort(a, j+1, high);}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;QuickSort(num, 0, 9999);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}(7)归并排序#include <iostream.h>/* int rand(void);void srand(unsigned int seed );*/#include<iostream.h>#include<stdlib.h>#include<stdio.h>#include<time.h>#include<windows.h>typedef int keytype;struct datatype{keytype key;};void Merge(datatype a[], int n, datatype swap[], int k)//对有序表a[0]--a[n-1]进行一次二路归并排序,每个有序子表的长度为k//一次二路归并排序后新的有序子表存于swap中{int m = 0, u1,l2,i,j,u2;int l1 = 0; //给出第一个有序子表下界while(l1+k <= n-1){l2 = l1 + k; //计算第二个有序子表下界u1 = l2 - 1; //计算第一个有序子表上界u2 = (l2+k-1 <= n-1)? l2+k-1: n-1; //计算第二个有序子表上界//两个有序子表合并for(i = l1, j = l2; i <= u1 && j <= u2; m++){if(a[i].key <= a[j].key){swap[m] = a[i];i++;}else{swap[m]=a[j];j++;}}//子表2已归并完,将子表1中剩余的对象顺序存放到数组swap中while(i <= u1){swap[m] = a[i];m++;i++;}//子表1已归并完,将子表2中剩余的对象顺序存放到数组swap中while(j <= u2){swap[m] = a[j];m++;j++;}l1 = u2 + 1;}//将原始数组中不足二组的对象顺序存放到数组swap中for(i = l1; i < n; i++, m++) swap[m] = a[i];}void MergeSort(datatype a[], int n)//用二路归并排序法对对象数组a[0]--a[n-1]排序,swap用于临时存放对象{int i, k = 1; //归并长度由1开始datatype *swap = new datatype[n]; //动态数组申请while(k < n){Merge(a, n, swap, k);//将记录从数组swap放回a中for(i = 0; i < n; i++) a[i] = swap[i];//归并长度加倍k = 2 * k;}delete []swap;}void main(){/*srand((unsigned)time(NULL));// 随机种子*//*time_t t;srand((unsigned)time(&t));*/time_t t1,t2;srand((unsigned)GetCurrentTime());datatype num[10000];t1=GetCurrentTime();for(int i=0;i<10000;i++){num[i].key=rand();}int n=10000;MergeSort(num, n);for(int j=0;j<10000;j++)cout<<num[j].key<<endl;t2=GetCurrentTime();cout<<"The t1 time is:"<<t1<<"The t2 time is:"<<t2<<" t2-t1:"<<t2-t1<<endl;getchar();}四:课程设计的结果对10000个随机数排序所用时间对1000个随机数排序所用时间用图的形式表示如下:直接插入希尔排序直接选择堆排序冒泡排序快速排序归并排序五:课程设计的结论在数据多的情况下,归并排序能够在最短的运行中完成排序,其次希尔排序,堆排序,快速排序。

相关文档
最新文档