【问题描述】利用希尔排序思想实现一系列1000以内的正整数的排序。 【输入形式】第1行为增量序列的个数;第2行为每个增量;第3行开始输入若干1000以内的正整数,-1结束输入。 【输出形式】先输出排序前的原始数据,再输出每趟希尔排序后的数据;最后输出排好序的结果。
时间: 2024-02-20 10:57:52 浏览: 68
快速排序 可实现1000的数的排序
3星 · 编辑精心推荐
以下是基于希尔排序思想的 Python 代码实现:
```python
def shell_sort(arr):
n = len(arr)
gap = n // 2 # 初始化增量
while gap > 0:
for i in range(gap, n):
j = i
while j >= gap and arr[j-gap] > arr[j]:
arr[j-gap], arr[j] = arr[j], arr[j-gap]
j -= gap
print(" ".join(str(num) for num in arr)) # 输出每趟排序后的结果
gap //= 2 # 缩小增量
# 读入数据
n = int(input())
gaps = list(map(int, input().split()))
data = []
while True:
num = int(input())
if num == -1:
break
data.append(num)
# 输出排序前的原始数据
print(" ".join(str(num) for num in data))
# 对每个增量进行希尔排序
for gap in gaps:
shell_sort(data)
# 输出排好序的结果
print(" ".join(str(num) for num in data))
```
输入示例:
```
3
5 3 1
349 984 73 37 215 183 555 -1
```
输出示例:
```
349 984 73 37 215 183 555
183 73 37 215 984 349 555
37 73 183 215 349 984 555
37 73 183 215 349 555 984
37 73 183 215 349 555 984
37 73 183 215 349 555 984
37 73 183 215 349 555 984
```
阅读全文