活动内容:
- 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循环不理解,还有希尔排序,后面询问结对伙伴刘伟康得出答案。告诉了我元素类型和元素名称。希尔排序画图为我讲解。
实现图片
-
选择排序:
-
插入排序:
-
冒泡排序:
-
快速排序:
-
归并排序: