【发布时间】:2020-07-16 11:24:10
【问题描述】:
import sys
首先创建一个函数,并将 arr 和 n 作为参数传递。
def recursiveinsertionsort(arr,n):
基本情况:当 n=0 或 n=1 时。
if n<=1:
return
现在调用序列直到剩下的 n-1 项。
recursiveinsertionsort(arr,n-1)
temp=arr[n-1]
j=n-2
while j>=0 and arr[j+1] < arr[j]:
arr[j+1]=arr[j]
j-=1
arr[j+1]=temp
def printArray(arr,n):
for i in range(n):
print(arr[i])
arr=[15,12,26,98,45,3]
n=len(arr)
recursiveinsertionsort(arr,n)
printArray(arr,n)
输出未排序。
【问题讨论】:
-
插入排序的本质是(a)找到要插入的值在已经排序的东西中的位置,然后(b)插入它。因此,您需要扫描
arr[]以获取第一个值> temp,然后在该点插入——将内容向上移动arr[],这将覆盖您从temp读取的位置。 -
@ChrisHall 请张贴您想说的语法。会很有帮助。提前致谢
-
通话后
recursiveinsertionsort(arr,n-1)(1) 你有n >= 2; (2) 你知道arr[0]到(包括)arr[n-2]是有序的,并且 (3) 下一个要排序的项目是temp = arr[n-1]——到目前为止一切都很好。所以现在 (a) 从arr[0]扫描到arr[n-2]以找到arr[j],第一个值 >temp。然后 (b)temp属于arr[j],但是从arr[j]到arr[n-2](包括)的所有内容都需要向上移动到arr[j+1]到arr[n-1](覆盖arr[n-1],其中temp读自)。也就是说,您确实需要注意temp >arr[n-2]`的情况。
标签: python-3.x algorithm sorting data-structures recursive-datastructures