def merge_sort(arr
):
if not arr
or len(arr
) == 1:
return arr
mid
= (len(arr
) - 1) // 2
return merge
(merge_sort
(arr
[: mid
+ 1]), merge_sort
(arr
[mid
+ 1 :]))
def merge(p
, q
):
res
= []
i
, j
= 0, 0
while i
< len(p
) and j
< len(q
):
if p
[i
] <= q
[j
]:
res
.append
(p
[i
])
i
+= 1
else:
res
.append
(q
[j
])
j
+= 1
return res
+ p
[i
:] + q
[j
:]
def quick_sort(arr
):
if not arr
or len(arr
) == 1:
return arr
k
, new_arr
= partition
(arr
)
return quick_sort
(new_arr
[:k
]) + [new_arr
[k
]] + quick_sort
(new_arr
[k
+ 1 :])
def partition(arr
):
tmp
= arr
[-1]
i
, j
= 0, 0
while j
< len(arr
):
if arr
[j
] <= tmp
:
arr
[j
], arr
[i
] = arr
[i
], arr
[j
]
i
+= 1
j
+= 1
return i
- 1, arr
arr
= [2, 1, 3, 4, 5, 10, 3, 2, 9]
for i
in range(len(arr
) + 1):
sorted_arr
= merge_sort
(arr
[:i
])
print(sorted_arr
)
分治思维,双指针思维,一般要使用新的存储来返回值
转载请注明原文地址:https://ipadbbs.8miu.com/read-23559.html