排序算法比较实验报告

合集下载

内部排序比较 (实验报告+源程序)C++

内部排序比较  (实验报告+源程序)C++

实验报告3实验名称:数据结构与软件设计实习题目:内部排序算法比较专业:生物信息学班级:01 姓名:学号:实验日期:2010.07.24一、实验目的:比较冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序;二、实验要求:待排序长度不小于100,数据可有随机函数产生,用五组不同输入数据做比较,比较的指标为关键字参加比较的次数和关键字移动的次数;对结果做简单的分析,包括各组数据得出结果的解释;设计程序用顺序存储。

三、实验内容对各种内部排序算法的时间复杂度有一个比较直观的感受,包括关键字比较次数和关键字移动次数。

将排序算法进行合编在一起,可考虑用顺序执行各种排序算法来执行,最后输出所有结果。

四、实验编程结果或过程:1. 数据定义typedef struct { KeyType key; }RedType; typedef struct { RedType r[MAXSIZE+1]; int length;}SqList;2. 函数如下,代码详见文件“排序比较.cpp”int Create_Sq(SqList &L)void Bubble_sort(SqList &L)//冒泡排序void InsertSort(SqList &L)//插入排序void SelectSort(SqList &L) //简单选择排序int Partition(SqList &L,int low,int high) void QSort(SqList &L,int low,int high)//递归形式的快速排序算法void QuickSort(SqList &L)void ShellInsert(SqList &L,int dk)//希尔排序void ShellSort(SqList &L,int dlta[ ])3. 运行测试结果,运行结果无误,如下图语速个数为20元素个数为100错误调试无。

快速排序的实验报告

快速排序的实验报告

快速排序的实验报告《快速排序实验报告》摘要:本实验旨在通过实际操作快速排序算法,对其性能进行评估和分析。

通过对不同规模数据集的排序实验,我们对快速排序算法的时间复杂度和空间复杂度进行了详细的分析,并对比了不同数据规模下快速排序算法的排序效率。

实验结果表明,快速排序算法在大多数情况下具有较高的排序效率和稳定的性能。

引言:快速排序是一种常用的排序算法,其时间复杂度为O(nlogn),在实际应用中具有较高的效率和性能。

本实验通过对快速排序算法的实际操作和性能评估,旨在深入了解快速排序算法的内部原理和实际应用效果,为进一步研究和应用排序算法提供参考。

实验方法:1. 实验环境:使用C++语言编写快速排序算法,运行环境为Windows操作系统,CPU为Intel Core i5,内存为8GB。

2. 实验数据:选取不同规模的随机数据集进行排序实验,包括1000个数据、10000个数据和100000个数据。

3. 实验步骤:分别对不同规模的数据集进行快速排序算法的排序操作,并记录排序所需的时间和空间复杂度。

实验结果:1. 时间复杂度:通过实验数据统计,不同规模数据集下,快速排序算法的平均时间复杂度分别为O(nlogn)、O(nlogn)和O(nlogn),验证了快速排序算法的时间复杂度为O(nlogn)。

2. 空间复杂度:实验结果表明,快速排序算法的空间复杂度为O(logn),在不同规模数据集下,所需的额外空间较小。

3. 排序效率:对比实验结果显示,快速排序算法在不同规模数据集下具有较高的排序效率,排序时间随数据规模的增加而略微增加,但仍保持较高的效率。

结论:通过本实验,我们对快速排序算法的时间复杂度和空间复杂度进行了详细分析,并验证了其在不同规模数据集下的排序效率。

实验结果表明,快速排序算法具有较高的排序效率和稳定的性能,在实际应用中具有较大的优势。

然而,我们也发现在极端情况下,快速排序算法的性能可能会受到影响,需要进一步研究和改进。

算法分析与设计实验报告合并排序快速排序

算法分析与设计实验报告合并排序快速排序

算法分析与设计实验报告:合并排序与快速排序一、引言算法是计算机科学中非常重要的一部分,它涉及到解决问题的方法和步骤。

合并排序和快速排序是两种经典而常用的排序算法。

本文将对这两种排序算法进行分析和设计实验,通过对比它们的性能和效率,以期得出最优算法。

二、合并排序合并排序是一种分治算法,它将原始数组不断分解为更小的数组,直到最后细分为单个元素。

然后,再将这些单个元素两两合并,形成一个有序数组。

合并排序的核心操作是合并两个有序的数组。

1. 算法步骤(1)将原始数组分解为更小的子数组,直到每个子数组只有一个元素;(2)两两合并相邻的子数组,同时进行排序,生成新的有序数组;(3)重复步骤(2),直到生成最终的有序数组。

2. 算法性能合并排序的最优时间复杂度为O(nlogn),其中n为待排序数组的长度。

无论最好情况还是最坏情况,合并排序的复杂度都相同。

合并排序需要额外的存储空间来存储临时数组,所以空间复杂度为O(n)。

三、快速排序快速排序也是一种分治算法,它将原始数组根据一个主元(pivot)分成两个子数组,一个子数组的元素都小于主元,另一个子数组的元素都大于主元。

然后,递归地对这两个子数组进行排序,最后得到有序数组。

快速排序的核心操作是划分。

1. 算法步骤(1)选择一个主元(pivot),可以是随机选择或者固定选择第一个元素;(2)将原始数组根据主元划分为两个子数组,一个子数组的元素都小于主元,另一个子数组的元素都大于主元;(3)递归地对这两个子数组进行快速排序;(4)重复步骤(2)和(3),直到每个子数组只有一个元素,即得到最终的有序数组。

2. 算法性能快速排序的平均时间复杂度为O(nlogn),其中n为待排序数组的长度。

最坏情况下,当每次选择的主元都是最小或最大元素时,时间复杂度为O(n^2)。

快速排序是原地排序,不需要额外的存储空间,所以空间复杂度为O(1)。

四、实验设计为了验证合并排序和快速排序的性能和效率,我们设计以下实验:1. 实验目的:比较合并排序和快速排序的时间复杂度和空间复杂度。

算法快速排序实验报告

算法快速排序实验报告

一、实验目的1. 理解快速排序算法的基本原理和实现方法。

2. 通过实验验证快速排序算法的效率。

3. 掌握快速排序算法在不同数据集上的性能表现。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm三、实验原理快速排序(Quick Sort)是一种常用的排序算法,它采用分治策略,将原始数据集划分为较小的子集,递归地对这些子集进行排序,最终实现整个数据集的有序排列。

快速排序的平均时间复杂度为O(nlogn),在最坏情况下为O(n^2)。

快速排序算法的核心思想是选取一个基准值(pivot),然后将数据集划分为两部分,一部分是小于基准值的元素,另一部分是大于基准值的元素。

接下来,递归地对这两部分进行快速排序。

四、实验步骤1. 设计一个快速排序函数,实现快速排序算法。

2. 编写一个测试函数,用于生成随机数据集和测试排序函数。

3. 对不同大小的数据集进行排序,并记录排序时间。

4. 分析实验结果,比较快速排序算法在不同数据集上的性能。

五、实验代码```pythonimport randomimport timedef quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)def test_sort():data_sizes = [100, 1000, 10000, 100000]for size in data_sizes:data = [random.randint(0, 1000000) for _ in range(size)]start_time = time.time()sorted_data = quick_sort(data)end_time = time.time()print(f"Data size: {size}, Sorting time: {end_time -start_time:.6f} seconds")test_sort()```六、实验结果与分析1. 随着数据规模的增加,快速排序的时间逐渐增加,符合时间复杂度为O(nlogn)的特性。

排序算法实验报告

排序算法实验报告

数据结构实验报告八种排序算法实验报告一、实验内容编写关于八种排序算法的C语言程序,要求包含直接插入排序、希尔排序、简单项选择择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序。

二、实验步骤各种内部排序算法的比较:1.八种排序算法的复杂度分析〔时间与空间〕。

2.八种排序算法的C语言编程实现。

3.八种排序算法的比较,包括比较次数、移动次数。

三、稳定性,时间复杂度和空间复杂度分析比较时间复杂度函数的情况:时间复杂度函数O(n)的增长情况所以对n较大的排序记录。

一般的选择都是时间复杂度为O(nlog2n)的排序方法。

时间复杂度来说:(1)平方阶(O(n2))排序各类简单排序:直接插入、直接选择和冒泡排序;(2)线性对数阶(O(nlog2n))排序快速排序、堆排序和归并排序;(3)O(n1+§))排序,§是介于0和1之间的常数。

希尔排序(4)线性阶(O(n))排序基数排序,此外还有桶、箱排序。

说明:当原表有序或基本有序时,直接插入排序和冒泡排序将大大减少比较次数和移动记录的次数,时间复杂度可降至O〔n〕;而快速排序则相反,当原表基本有序时,将蜕化为冒泡排序,时间复杂度提高为O〔n2〕;原表是否有序,对简单项选择择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。

稳定性:排序算法的稳定性:假设待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;假设经排序后,记录的相对次序发生了改变,则称该算法是不稳定的。

稳定性的好处:排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。

基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。

另外,如果排序算法稳定,可以防止多余的比较;稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序四、设计细节排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

数据结构实验报告排序

数据结构实验报告排序

数据结构实验报告排序数据结构实验报告:排序引言:排序是计算机科学中常见的算法问题之一,它的目标是将一组无序的数据按照特定的规则进行排列,以便于后续的查找、统计和分析。

在本次实验中,我们将学习和实现几种常见的排序算法,并对它们的性能进行比较和分析。

一、冒泡排序冒泡排序是最简单的排序算法之一,它通过不断交换相邻的元素,将较大(或较小)的元素逐渐“冒泡”到数组的一端。

具体实现时,我们可以使用两层循环来比较和交换元素,直到整个数组有序。

二、插入排序插入排序的思想是将数组分为两个部分:已排序部分和未排序部分。

每次从未排序部分中取出一个元素,插入到已排序部分的适当位置,以保持已排序部分的有序性。

插入排序的实现可以使用一层循环和适当的元素交换。

三、选择排序选择排序每次从未排序部分中选择最小(或最大)的元素,与未排序部分的第一个元素进行交换。

通过不断选择最小(或最大)的元素,将其放置到已排序部分的末尾,从而逐渐形成有序序列。

四、快速排序快速排序是一种分治的排序算法,它通过选择一个基准元素,将数组划分为两个子数组,其中一个子数组的所有元素都小于等于基准元素,另一个子数组的所有元素都大于基准元素。

然后对两个子数组分别递归地进行快速排序,最终将整个数组排序。

五、归并排序归并排序也是一种分治的排序算法,它将数组划分为多个子数组,对每个子数组进行排序,然后再将排好序的子数组合并成一个有序的数组。

归并排序的实现可以使用递归或迭代的方式。

六、性能比较与分析在本次实验中,我们对以上几种排序算法进行了实现,并通过对不同规模的随机数组进行排序,比较了它们的性能。

我们使用了计算排序时间的方式,并记录了每种算法在不同规模下的运行时间。

通过对比实验结果,我们可以得出以下结论:1. 冒泡排序和插入排序在处理小规模数据时表现较好,但在处理大规模数据时性能较差,因为它们的时间复杂度为O(n^2)。

2. 选择排序的时间复杂度也为O(n^2),与冒泡排序和插入排序相似,但相对而言,选择排序的性能稍好一些。

数据排序实验实验报告

数据排序实验实验报告

一、实验目的1. 熟悉数据排序的基本概念和算法。

2. 掌握几种常见的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)的实现方法。

3. 分析各种排序算法的时间复杂度和空间复杂度。

4. 比较不同排序算法的效率,了解其适用场景。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 软件工具:PyCharm三、实验内容1. 实现冒泡排序、选择排序、插入排序、快速排序、归并排序等排序算法。

2. 对一组随机生成的数据进行排序,并记录每种排序算法的运行时间。

3. 分析各种排序算法的时间复杂度和空间复杂度。

4. 比较不同排序算法的效率,了解其适用场景。

四、实验步骤1. 实现排序算法(1)冒泡排序```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j] return arr```(2)选择排序```pythondef selection_sort(arr):n = len(arr)for i in range(n):min_idx = ifor j in range(i+1, n):if arr[min_idx] > arr[j]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i] return arr```(3)插入排序```pythondef insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i-1while j >=0 and key < arr[j]:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr```(4)快速排序```pythondef quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right) ```(5)归并排序```pythondef merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []i = j = 0while i < len(left) and j < len(right):if left[i] < right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result```2. 对一组随机生成的数据进行排序,并记录每种排序算法的运行时间```pythonimport randomimport timedef test_sort_algorithms():arr = [random.randint(0, 1000) for _ in range(1000)]print("Original array:", arr)print("Bubble Sort:", bubble_sort(arr.copy()))print("Selection Sort:", selection_sort(arr.copy()))print("Insertion Sort:", insertion_sort(arr.copy()))print("Quick Sort:", quick_sort(arr.copy()))print("Merge Sort:", merge_sort(arr.copy()))def measure_time(sort_function, arr):start_time = time.time()sort_function(arr)end_time = time.time()return end_time - start_timedef compare_sort_algorithms():arr = [random.randint(0, 1000) for _ in range(1000)]bubble_time = measure_time(bubble_sort, arr.copy())selection_time = measure_time(selection_sort, arr.copy()) insertion_time = measure_time(insertion_sort, arr.copy()) quick_time = measure_time(quick_sort, arr.copy())merge_time = measure_time(merge_sort, arr.copy())print("Bubble Sort Time:", bubble_time)print("Selection Sort Time:", selection_time)print("Insertion Sort Time:", insertion_time)print("Quick Sort Time:", quick_time)print("Merge Sort Time:", merge_time)if __name__ == "__main__":test_sort_algorithms()compare_sort_algorithms()```3. 分析各种排序算法的时间复杂度和空间复杂度(1)冒泡排序:时间复杂度O(n^2),空间复杂度O(1)(2)选择排序:时间复杂度O(n^2),空间复杂度O(1)(3)插入排序:时间复杂度O(n^2),空间复杂度O(1)(4)快速排序:平均时间复杂度O(nlogn),最坏时间复杂度O(n^2),空间复杂度O(logn)(5)归并排序:时间复杂度O(nlogn),空间复杂度O(n)4. 比较不同排序算法的效率,了解其适用场景通过比较实验结果,可以发现:- 在数据规模较小的情况下,冒泡排序、选择排序、插入排序等简单排序算法的效率较高。

实现排序算法的实验报告

实现排序算法的实验报告

一、实验目的1. 理解排序算法的基本原理和特点。

2. 掌握几种常用的排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序等)的实现方法。

3. 分析不同排序算法的时间复杂度和空间复杂度。

4. 通过实际编程实现排序算法,提高编程能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序5. 归并排序四、实验步骤1. 冒泡排序(1)编写冒泡排序函数:def bubble_sort(arr)。

(2)输入测试数据:arr = [5, 3, 8, 4, 1]。

(3)调用冒泡排序函数:bubble_sort(arr)。

(4)输出排序后的结果:print(arr)。

2. 选择排序(1)编写选择排序函数:def selection_sort(arr)。

(2)输入测试数据:arr = [5, 3, 8, 4, 1]。

(3)调用选择排序函数:selection_sort(arr)。

(4)输出排序后的结果:print(arr)。

3. 插入排序(1)编写插入排序函数:def insertion_sort(arr)。

(2)输入测试数据:arr = [5, 3, 8, 4, 1]。

(3)调用插入排序函数:insertion_sort(arr)。

(4)输出排序后的结果:print(arr)。

4. 快速排序(1)编写快速排序函数:def quick_sort(arr)。

(2)输入测试数据:arr = [5, 3, 8, 4, 1]。

(3)调用快速排序函数:quick_sort(arr)。

(4)输出排序后的结果:print(arr)。

5. 归并排序(1)编写归并排序函数:def merge_sort(arr)。

(2)输入测试数据:arr = [5, 3, 8, 4, 1]。

(3)调用归并排序函数:merge_sort(arr)。

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

信息学部算法分析上机报告学号0901******** 姓名陈龙指导老师秦明时间2011.11.1~11.23一.上机实验题目实验1比较归并排序和快速排序的区别。

实验2利用贪心算法对背包问题进行求解。

二.算法设计思路归并排序:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列,设定两个指针,最初位置分别为两个已经排序序列的起始位置,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置,重复步骤直到某一指针达到序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。

快速排序:设置两个变量I、J,排序开始的时候:I=0,J=N-1;以第一个数组元素作为关键数据,赋值给key,即key=A[0];从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],并与key交换;从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],与key交换;重复第3、4、5步,直到I=J;(3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。

找到并交换的时候i,j指针位置不变。

另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。

)背包问题:用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。

则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 。

可以压缩空间,f[v]=max{f[v],f[v-c[i]]+w[i]}三. 源程序归并排序#include<stdio.h>#include<stdlib.h># define N 50int b[N],a[N];int n,i;void Merge (int low, int mid,int high) //合并{int i; int l=low,h=mid+1,k=l;while ((l<=mid) && (h<=high)) //部分合并{if (a[l]<=a[h]) b[k++]=a[l++];else b[k++]=a[h++];}if(l>mid)while (h<=high) b[k++]=a[h++]; //转储剩余部分 elsewhile(l<=mid) b[k++]=a[l++];for (i=0;i<=high;i++) //将b数组转储到a a[i]=b[i];}int Merge2 (int l,int h) //分类{for (i=0;i<n;i++)printf("%d ",a[i]);printf("\n");int m;if (l<h){m=(l+h)/2;Merge2(l, m);Merge2(m+1, h);Merge ( l,m,h);}return a[i];}void main(){printf("请输入您要排序的数组大小(不超过50):");while (scanf("%d",&n)!=EOF){for (i=0;i<n;i++)scanf("%d",&a[i]);Merge2(0,n-1);for (i=0;i<n-1;i++)printf("%d ",a[i]);printf("%d\n",a[n-1]);}}快速排序#include "stdio.h"#include "stdlib.h"# define N 50int a[N];int i,n;void Quick(int list[ ], int left, int right) //lfet为数组最左端, right为数组最右端{int s;int i, j;int temp;for (i=0;i<n;i++)printf("%d ",a[i]);printf("\n");if(left < right) //如果没有查询完所有数组,则继续递归{s = list[left];i = left-1;j = right + 1;while(i+1!=j){if(list[i+1]<=s)i++;else if(list[j-1]>s)j--;else{temp=list[i+1];list[++i]=list[j-1];list[--j]=temp;}}list[left] = list[i];list[i] = s;Quick(list, left, i - 1); //对左边递归Quick(list, i + 1, right); //对右边递归}}void main(){printf("请输入您要排序的数组大小(不超过50):");while (scanf("%d",&n)!=EOF){for (i=0;i<n;i++)scanf("%d",&a[i]);Quick(a,0,n-1);for (i=0;i<n-1;i++)printf("%d ",a[i]);printf("%d\n",a[n-1]);}}背包问题#include <stdio.h>#include <stdlib.h>#define N 3struct Thing{int num ;int price;int weight;float aver;};void swap(int *i,int *j){int temp;temp = *i;*i = *j;*j = temp;}int main(){int M;int i,j,k=0,NUM = 1;struct Thing *p = (struct Thing *)malloc(N*sizeof(struct Thing));printf("请输入背包能承受的重量:");scanf("%d",&M);printf("\n");for(i=0;i<N;++i){// printf("请输入物品序列号(请从1开始顺序加1):");// scanf("%d",&p[i].num);p[i].num = NUM++;printf("请输入%d号物品的价值:",p[i].num);scanf("%d",&p[i].price);printf("请输入%d号物品的重量:",p[i].num);scanf("%d",&p[i].weight);p[i].aver = ((float)p[i].price / (float)p[i].weight);}for(i = 0;i<N-1;i++){for(j = i+1;j<N;j++){if(p[i].aver<p[j].aver){swap(&p[i].num,&p[j].num);swap(&p[i].price,&p[j].price);swap(&p[i].weight,&p[j].weight);}}}printf("\n");printf("按照物品单位重量的价值从大到小排序为:\n");for(i = 0;i<N;i++){printf("事件序列号:%d ",p[i].num);printf("物品价值%d ",p[i].price);printf("物品重量%d ",p[i].weight);printf("\n");}printf("\n");printf("\n");while(1){if(M > p[k].weight){printf("先装入%d号码的物品%d的重量,\n",p[k].num,p[k].weight);M = M - p[k].weight;k++;}elsebreak;}printf("再装入%d号的物品%d的重量\n",p[k].num,M);printf("\n");printf("\n");free(p);return 0;}三.实验结果归并排序快速排序背包问题五.实验心得通过实验可以知道,若数据比较无序,快排快,若数据中部分有序,归并快。

我觉得算法是一门理论和实践性都很强的课程,从算法和对算法的分析,几乎都是对具体问题的抽象。

因而,我们需要更多的时间来理解、掌握相关的知识,并利用电脑在机子上运行敲打代码,吸收算法的精髓。

当然在这一过程中也存在很多问题,比如我们不能完全理解算法,不能将之在上机实验中将之实现,对于算法的一些小细节不够清晰,影响了我们对算法的理解,但我觉得我们很幸运,因为秦老师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,对于我们提出的问题,无论课上或是课外,老师一直是不厌其烦,甚至利用课余时间为我们讲解重要的难题。

相关文档
最新文档