题目:给定一个长度为N的整型数组arr,其中有N 个互不相等的自然数1~N。请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N
要求:时间复杂度为O(N),额外空间复杂度为O(1)
解答:
arr在调整之后应该是下标从0到N-1的位置上依次放着1~N,即arr[index] = index + 1
1、从左到右遍历arr,假设当前遍历到i位置
2、如果arr[i] = i + 1, 说明当前的位置不需要调整,继续遍历下一个位置
3、如果arr[i] = i + 1, 说明此时i 位置的数arr[i]不应该放在i位置上,接下来继续进行跳的过程
def sort1(L):
if L == None or len(L) < 2:
return L
for i in range(len(L)):
tmp = L[i]
while tmp != i+1:
tt = L[tmp-1]
L[tmp-1] = tmp
tmp = tt