如果你是一名编程老师,你必须选择一种排序算法来教你的学生哪一种?我只要求一个,因为我只想介绍排序的概念.它应该是冒泡排序还是选择排序?我注意到这两个人最常被教授.还有其他类型的排序可以用更容易理解的方式解释排序吗?
我不确定自己可以成为一名计算机科学老师,只教一种排序算法.
至少应该向学生讲授每种主要排序类型中的至少一种,即交换排序,选择排序,插入排序和合并排序.除了这些类型中的每一种之外,我还将介绍属于分区排序标题的Quicksort.
至于我将涵盖的每种类型的特定种类:
冒泡排序作为交换排序类别的一个例子,因为它是最简单的排序类型之一,也可能是他们已经看到或偶然发现的排序类型.如果他们为了简单的事情而不得不自己动手,这也是他们最常使用的那种,所以他们理解它是有意义的.
来自选择排序类别的Heaport.这可能是Quicksort旁边最混乱的排序,但一旦他们理解了如何设置它们以理解Quicksort算法.
插入排序作为插入排序类别的一个示例将被涵盖,因为它也是一个简单的排序,他们可以得到很多用途.由于他们可能会遇到需要将两个列表合并在一起的情况,因此知道这个列表是有意义的.
Merge Sort在某种程度上是一种特殊的排序方式,因此您不会经常看到它,但它非常擅长它的功能,并且在您需要按照零碎方式对数据进行排序的情况下仍然很有用.
如果我不得不把事情缩小到我可以教的一种,但我有时间确保学生完全理解发生了什么然后我会教Quicksort.虽然它并不容易掌握,但绝大多数框架都将它用于排序算法,因此了解它的工作方式对于使用该框架进行开发非常有用.此外,很有可能如果有人能够理解Quicksort,那么他们应该能够自己学习冒号排序和插入排序.
让你的学生决定.
在介绍任何排序算法之前,给每个学生一些扑克牌,大约10个左右.然后让他们对卡片进行分类.让他们写下他们采取的步骤,这基本上是他们的算法.可能他们会发现插入或选择排序.您还可以要求他们估计,如果他们拥有100张或1000张牌,他们的排序会采取多少步骤,这是一个很好的导致大O符号.
PS - 有没有人认为他们会发现泡泡排序?
无论教授什么排序算法,如果学生还没有学习bogosort,他们就会错过,老师正在失去一种与观众互动的明显方式:)
如果你想教授排序,那么冒泡排序可能是最容易理解的.如果你想教授排序算法,那么你应该真正教授quicksort,mergesort,insertsort甚至是heapsort,以便学生能够感受到各种排序方法之间的权衡.
我首先要显示插入排序.每个人都对一张牌(基本上都是每个人)进行了分类.此外,它没有泡沫排序的糟糕表现.
我首先学习了Bubble Sort - 我想如果你只做一个,你可能需要做一个O(n ^ 2)算法,因为它们更容易理解.
有很多排序可视化器可以帮助您快速显示比较:
http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html
http://math.hws.edu/TMCM/java/xSortLab/
http://vision.bc.edu/~dmartin/teaching/sorting/anim-html/all.html
http://maven.smith.edu/~thiebaut/java/sort/