活动内容:

  • 1 给定下列数据:90 8 7 56 123 235 9 1 653 用JDB或IDEA单步跟踪下列算法的执行过程:选择排序,插入排序,希尔排序,冒泡排序,快速排序,归并排序
  • 2 提交每一趟的截图,要全屏,包含自己的学号信息
  • 3 课下把代码推送到代码托管平台

活动思路:

首先我们需要了解一下活动要求的算法内容。

  • 1 选择排序:选择排序(selection sort)算法重复这样的过程,分别将每个值放到排好序的最终位置,从而完成这一组值的排序。换句话说,对于表中的每个位置,算法选择应该处在那个位置的值,并将它放置到位。
  • 2 插入排序:插入排序(insertion sort)算法重复地将一个具体的值插入到表中已有序的子序列中,从而完成一组值的排序。每次将每个待排序的元素插入到有序子段中的合适位置,直到表中全部元素都有序时为止。
  • 3 冒泡排序:冒泡排序(bubble sort)算法重复地比较表中的相邻元素,如果他们呈逆序则交换它们。
  • 4 快速排序:快速排序(quick sort)算法跟据一个任意选定的划分元素(partition element)来对表进行划分,然后再递归地对划分元素两边的子段进行排序,从而完成对表的排序。
  • 5 归并排序:归并排序(merge sort)递归地对分表,直到每个子表只含有一个元素时为止,然后再将子表按序合并,从而完成对表的排序。
  • 6 希尔排序:先取一个小于n的整数d1作为第一个 增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,第二个增量d2该方法实质上是一种分组插入方法比较相隔较远距离(称为 增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell于1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。一般的初次取序列的一半为 增量,以后每次减半,直到增量为1。给定实例的shell排序的排序过程假设待排序文件有10个记录,其关键字分别是:49,38,65,97,76,13,27,49,55,04。增量序列的取值依次为:5,2,1

实现过程:

  • 首先我们需要准备一个名为Sorting的类,里面包含了上文提到的算法。翻翻教材就能找到——P305的13.5码云链接
  • 等到我们将13.5敲完并push到码云上去后我们就开始了下一步:写一个main函数,其中引用一下Sorting这个类(图片),并用Comparable创建一个数组(图片)。接下来只要用sort.方法(数组名称)将数组里的元素排序就OK。记得打印
  • 还有需要注意的一点是快速和排序中,要给出最小值和最大值,最小值为0,最大值要-1。
  • 关于for循环:由于元素类型为Comparable,所以我们需要用一个元素名称,然后将数组里的元素放到元素名称中再打印出来。

码云链接

问题解决:

  • 对于for循环不理解,还有希尔排序,后面询问结对伙伴刘伟康得出答案。告诉了我元素类型和元素名称。希尔排序画图为我讲解。

实现图片

  • 选择排序:

  • 插入排序:

  • 冒泡排序:

  • 快速排序:

  • 归并排序:

posted on 2017-10-17 23:24  20162319莫礼钟  阅读(138)  评论(0编辑  收藏  举报