给出如下关键字序列{50,26,38,80,70,90,8,30,40,20}的希尔排序过程,增量序列为d={5,3,1}。排序结果为从小到大请给出排序过程
时间: 2023-08-19 15:03:54 浏览: 108
希尔排序的
好的,这是一个经典的排序算法问题。希尔排序是插入排序的一种改进算法,通过将数据分组进行插入排序,最终达到整体有序的效果。
首先,按照增量序列d={5,3,1},将序列分为多个子序列,对每个子序列进行插入排序。具体过程如下:
1. 增量为5时,将序列分为两个子序列:{50, 90, 20}和{26, 8, 30, 40, 70, 38},对它们分别进行插入排序。
子序列{50, 90, 20}插入排序过程:
- 第一轮:将20插入到50之前,得到{20, 50, 90};
- 第二轮:将90插入到50之后,得到{20, 50, 90};
- 子序列{50, 90, 20}排序完毕。
子序列{26, 8, 30, 40, 70, 38}插入排序过程:
- 第一轮:将38插入到26之前,得到{38, 26, 8, 30, 40, 70};
- 第二轮:将70插入到40之后,得到{38, 26, 8, 30, 40, 70};
- 第三轮:将40插入到30之后,得到{38, 26, 8, 30, 40, 70};
- 第四轮:将30插入到8之后,得到{38, 26, 8, 30, 40, 70};
- 第五轮:将8插入到26之前,得到{8, 38, 26, 30, 40, 70};
- 子序列{26, 8, 30, 40, 70, 38}排序完毕。
经过第一轮排序后,序列变为{20, 38, 8, 30, 40, 50, 90, 26, 70, 40}。
2. 增量为3时,将序列分为三个子序列:{20, 30, 50, 26}、{38, 40, 70}和{8, 90, 40},对它们分别进行插入排序。
子序列{20, 30, 50, 26}插入排序过程:
- 第一轮:将26插入到20之前,得到{26, 30, 50, 20};
- 子序列{20, 30, 50, 26}排序完毕。
子序列{38, 40, 70}插入排序过程:
- 第一轮:无需排序,子序列{38, 40, 70}已经有序。
子序列{8, 90, 40}插入排序过程:
- 第一轮:将40插入到8之后,得到{8, 40, 90};
- 子序列{8, 90, 40}排序完毕。
经过第二轮排序后,序列变为{20, 26, 8, 30, 38, 40, 50, 90, 70, 40}。
3. 增量为1时,对整个序列进行插入排序。
插入排序过程:
- 第一轮:将26插入到20之后,得到{20, 26, 8, 30, 38, 40, 50, 90, 70, 40};
- 第二轮:将8插入到26之前,得到{8, 20, 26, 30, 38, 40, 50, 90, 70, 40};
- 第三轮:将30插入到26之后,得到{8, 20, 26, 30, 38, 40, 50, 90, 70, 40};
- 第四轮:将38插入到30之后,得到{8, 20, 26, 30, 38, 40, 50, 90, 70, 40};
- 第五轮:将40插入到38之后,得到{8, 20, 26, 30, 38, 40, 50, 90, 70, 40};
- 第六轮:将50插入到40之后,得到{8, 20, 26, 30, 38, 40, 50, 90, 70, 40};
- 第七轮:将90插入到50之后,得到{8, 20, 26, 30, 38, 40, 50, 70, 90, 40};
- 第八轮:将70插入到90之前,得到{8, 20, 26, 30, 38, 40, 50, 70, 90, 40};
- 第九轮:将40插入到90之前,得到{8, 20, 26, 30, 38, 40, 50, 70, 40, 90};
- 排序完毕,最终序列为{8, 20, 26, 30, 38, 40, 50, 70, 40, 90}。
以上就是完整的希尔排序过程,排序结果为从小到大为{8, 20, 26, 30, 38, 40, 50, 70, 40, 90}。
阅读全文