/* *Copyright(c) 2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:test.cpp *作 者:徐群壮 *完成日期:2015.9.7 *版 本 号:v1.0 * *问题描述:给定序列{57,40,38,11,13,34,48,75,6,19,9,7} (1)请描述用直接插入排序算法完成排序的过程 <span style="white-space:pre"> </span> (2)请描述用希尔排序算法完成排序的过程 *输入描述: *程序输出: */
直接插入排序算法过程:
排序思路:把给定序列分为有序区和无序区,刚开始时有序区只有57这个元素。接下来的操作 是将无序区的第一个元素40,插入到前面有序区的合适位置当中去,使有序区刷新。
具体过程如下: 初始关键字: (57),40,38,11,13,34,48,75,6,19,9,7 第1趟: (40,57),38,11,13,34,48,75,6,19,9,7 第2趟: (38,40,57),11,13,34,48,75,6,19,9,7 第3趟: (11,38,40,57),13,34,48,75,6,19,9,7 第4趟: (11,13,38,40,57),34,48,75,6,19,9,7 第5趟: (11,13,34,38,40,57),48,75,6,19,9,7 第6趟: (11,13,34,38,40,48,57),75,6,19,9,7 第7趟: (11,13,34,38,40,48,57,75),6,19,9,7 第8趟: (6,11,13,34,38,40,48,57,75),19,9,7 第9趟: (6,11,13,19,34,38,40,48,57,75),9,7 第10趟:(6,9,11,13,19,34,38,40,48,57,75),7 第11趟: (6,7,9,11,13,19,34,38,40,48,57,75)
希尔排序算法过程:
排序思路:先取定一个小于n的整数作为d1作为第一个增量,把表的全部记录分为 d1个组,所有距离为d1的倍数的记录放在同一组中,在各组内进行直接插入排序; 取第二个增量d2(d2<d1),重复上述的分组和排序,直至所取的增量为1,即所有 的记录放在同一组中进行直接插入排序为止。 具体过程如下: 57,40,38,11,13,34,48,75,6,19,9,7 d1=3 11,40,38,19,13,34,48,75,6,57,9,7 (将距离为3的倍数的记录放在同一组内,即将组内57,11,48,19进行直接插入排序) d2=2 6,40,9,19,11,34,13,75,38,57,48,7 (将距离为3的倍数的记录放在同一组内,即将组内11,38,13,48,6,9进行直接插入排) d3=1 6,7,9,11,13,19,34,38,40,48,57,75 (d=1时,进行直接插入排序)