关于C++排序很简单的问题
给出一组关键字(12,2,16,30,8,28,4,10,20,6,18),按从小到大顺序,给出一组关键字(12,2,16,30,8,28,4,10,20,6,18),按...
给出一组关键字(12,2,16,30,8,28,4,10,20,6,18),按从小到大顺序,
给出一组关键字(12,2,16,30,8,28,4,10,20,6,18),按从小到大顺序,
(1)写出其进行希尔排序(排序的间隔增量为5)的结果;(麻烦给出详细点的过程啊) 展开
给出一组关键字(12,2,16,30,8,28,4,10,20,6,18),按从小到大顺序,
(1)写出其进行希尔排序(排序的间隔增量为5)的结果;(麻烦给出详细点的过程啊) 展开
1个回答
展开全部
希尔排序是把关键字按增量分为多组,对每组使用插入排序,然后把增量减小,重复些过程,到增量为1时使用插入排序就将关键字排好序了。
第一个增量为5的情况下,给出的关键字可分组如下:
12, 2, 16, 30, 8
28, 4, 10, 20, 6
18
希尔排序的组指的是上面这个数阵中的各列。如12,28,18为一组,2,4为另一组。
分好组后对各组进行简单插入排序,结果为:
12,2,10,20,6
18,4,16,30,8
28
按行读取就是第一次排序的结果:12,2,10,20,6,18,4,16,30,8,28。
这就是楼主要的结果。
如果要继续排完的话,需要减小增量。
假设增量减为3,则把第一次的结果按3进行分组重复上述过程。然后再把增量减小到1,进行直接插入排序就OK了。
第一个增量为5的情况下,给出的关键字可分组如下:
12, 2, 16, 30, 8
28, 4, 10, 20, 6
18
希尔排序的组指的是上面这个数阵中的各列。如12,28,18为一组,2,4为另一组。
分好组后对各组进行简单插入排序,结果为:
12,2,10,20,6
18,4,16,30,8
28
按行读取就是第一次排序的结果:12,2,10,20,6,18,4,16,30,8,28。
这就是楼主要的结果。
如果要继续排完的话,需要减小增量。
假设增量减为3,则把第一次的结果按3进行分组重复上述过程。然后再把增量减小到1,进行直接插入排序就OK了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询