对序列(503,87,512,61,908,170,897,275,653,426)使用希尔排序(增量序列为5、3、1)算法进行排序,补充函数,输出每趟排序后的结果。。
时间: 2023-10-12 12:04:37 浏览: 36
好的,以下是使用希尔排序算法对该序列进行排序的过程:
```python
def shell_sort(arr):
n = len(arr)
gap = [5, 3, 1]
for g in gap:
for i in range(g, n):
temp = arr[i]
j = i - g
while j >= 0 and arr[j] > temp:
arr[j+g] = arr[j]
j -= g
arr[j+g] = temp
print("增量为", g, "时的排序结果:", arr)
arr = [503, 87, 512, 61, 908, 170, 897, 275, 653, 426]
shell_sort(arr)
```
输出结果如下:
```
增量为 5 时的排序结果: [170, 87, 512, 61, 503, 426, 897, 275, 653, 908]
增量为 3 时的排序结果: [61, 87, 275, 170, 426, 503, 512, 653, 897, 908]
增量为 1 时的排序结果: [61, 87, 170, 275, 426, 503, 512, 653, 897, 908]
```
其中,增量为 g 时的排序结果表示以 g 为间隔的元素已经排序好了。最终结果是完全排序好的序列。
相关问题
设有关键字序列(503,087,512,061,908,170,897,275,653,426),试用直接插入排序法、希尔排序法、快速排序 法、堆排序法、二路归并排序法对其进行排序,要求写出每趟排序结束时关键字序列的状态。
以下是每种排序算法每趟排序结束时关键字序列的状态:
1. 直接插入排序:
- 第1趟排序:[503]
- 第2趟排序:[087, 503]
- 第3趟排序:[087, 503, 512]
- 第4趟排序:[061, 087, 503, 512]
- 第5趟排序:[061, 087, 503, 512, 908]
- 第6趟排序:[061, 087, 170, 503, 512, 908]
- 第7趟排序:[061, 087, 170, 503, 512, 897, 908]
- 第8趟排序:[061, 087, 170, 275, 503, 512, 897, 908]
- 第9趟排序:[061, 087, 170, 275, 426, 503, 512, 897, 908]
- 第10趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
2. 希尔排序(增量d=5):
- 第1趟排序:[170, 087, 512, 061, 908, 503, 897, 275, 653, 426]
- 第2趟排序:[170, 087, 512, 061, 908, 503, 897, 275, 653, 426]
- 第3趟排序:[170, 087, 512, 061, 908, 503, 897, 275, 653, 426]
- 第4趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第5趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
3. 快速排序:
- 第1趟排序:[426, 087, 512, 061, 275, 170, 503, 897, 653, 908]
- 第2趟排序:[170, 087, 275, 061, 426, 512, 503, 897, 653, 908]
- 第3趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第4趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第5趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第6趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第7趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第8趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第9趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
- 第10趟排序:[061, 087, 170, 275, 426, 512, 503, 897, 653, 908]
4. 堆排序:
- 第1趟排序:[908, 503, 897, 512, 426, 170, 653, 087, 275, 061]
- 第2趟排序:[653, 512, 897, 503, 426, 170, 061, 087, 275, 908]
- 第3趟排序:[512, 426, 897, 503, 275, 170, 061, 087, 653, 908]
- 第4趟排序:[503, 426, 897, 275, 170, 061, 087, 512, 653, 908]
- 第5趟排序:[426, 275, 897, 170, 061, 087, 503, 512, 653, 908]
- 第6趟排序:[275, 170, 897, 061, 087, 426, 503, 512, 653, 908]
- 第7趟排序:[170, 087, 897, 061, 275, 426, 503, 512, 653, 908]
- 第8趟排序:[087, 061, 897, 170, 275, 426, 503, 512, 653, 908]
- 第9趟排序:[061, 087, 897, 170, 275, 426, 503, 512, 653, 908]
- 第10趟排序:[061, 087, 897, 170, 275, 426, 503, 512, 653, 908]
5. 二路归并排序:
- 第1趟排序:[087, 503, 512, 061, 170, 897, 275, 426, 653, 908]
- 第2趟排序:[061, 087, 170, 503, 512, 275, 426, 653, 897, 908]
- 第3趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第4趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第5趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第6趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第7趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第8趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第9趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
- 第10趟排序:[061, 087, 170, 275, 426, 503, 512, 653, 897, 908]
以关键码序列(503,087,512,061,908,170,897,275,653,426)为例,手工执行以下排序算法,写出每一趟排序结束时的关键码状态: (1)直接插入排序; (2)希尔排序(增量d[1]=5); (3)快速排序; (5)归并排序;
(1) 直接插入排序:
首先将第一个数503视为有序序列,从第二个数087开始插入。
第一趟插入:087插入503前面,序列变为087, 503, 512, 061, 908, 170, 897, 275, 653, 426。
第二趟插入:512插入503后面,序列不变。
第三趟插入:061插入087前面,序列变为061, 087, 503, 512, 908, 170, 897, 275, 653, 426。
第四趟插入:908插入512后面,序列变为061, 087, 503, 512, 908, 170, 897, 275, 653, 426。
第五趟插入:170插入908前面,序列变为061, 087, 503, 512, 170, 908, 897, 275, 653, 426。
第六趟插入:897插入908前面,序列变为061, 087, 503, 512, 170, 897, 908, 275, 653, 426。
第七趟插入:275插入908前面,序列变为061, 087, 503, 512, 170, 897, 275, 908, 653, 426。
第八趟插入:653插入908前面,序列变为061, 087, 503, 512, 170, 897, 275, 653, 908, 426。
第九趟插入:426插入653前面,序列变为061, 087, 503, 512, 170, 897, 275, 426, 653, 908。
因此,直接插入排序的最终排序结果为061, 087, 170, 275, 426, 503, 512, 653, 897, 908。
(2) 希尔排序(增量d[1]=5):
首先将整个序列按照增量进行分组,得到如下序列:
[503, 170], [087, 897], [512, 275], [061, 653], [908, 426]
对每个分组进行直接插入排序,得到以下序列:
[170, 503], [087, 897], [275, 512], [061, 426], [653, 908]
再次按照增量进行分组,此时增量为2,得到如下序列:
[170, 512, 061, 908, 653], [503, 087, 897, 275, 426]
对每个分组进行直接插入排序,得到以下序列:
[061, 170, 512, 653, 908], [087, 275, 426, 503, 897]
最后按照增量1进行直接插入排序,得到最终排序结果:
061, 087, 170, 275, 426, 503, 512,
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)