【转】参考:https://blog.youkuaiyun.com/besmarterbestronger/article/details/94960879
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
复习冒泡排序:

def maopao(array):
for i in range(len(array)):
for j in range(len(array) - i - 1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
b = maopao([5, 4, 3, 2])
print(b)
# 笨方法,空间换时间把,这里不整那些双指针了
class Solution:
def reOrderArray(self, array):
# write code here
a = []
b = []
for i in array:
if i & 1:
a.append(i)
else:
b.append(i)
return a + b
复习快速排序(基础版本 + 进阶版):



def quicksort(array):
"""常规思路,缺点需要开辟新的数组,不能原地排序"""
if len(array) < 2:
return array
else:
index = 0
pivot = array[index]
less = [i for i in array[1:] if i <= pivot]
great = [i for i in array[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(great)
def partition(array, beg, end):
"""双指针思路, 利用partition原地排序"""
pivot_index = beg
pivot = array[pivot_index]
left = pivot_index + 1
right = end - 1
while True:
while left <= right and array[left] < pivot:
left += 1
while right >= left and array[right] >= pivot:
right -= 1
if left > right:
break
else:
array[left], array[right] = array[right], array[left]
array[pivot_index], array[right] = array[right], array[pivot_index]
return right
def quicksort2(array, beg, end):
if beg < end:
pivot = partition(array, beg, end)
quicksort2(array, beg, pivot)
quicksort2(array, pivot + 1, end)
def test():
# seq = list(range(5))
seq = [1, 3, 2, 4, 0]
# random.shuffle(seq)
print("seq = ", seq)
quicksort2(seq, 0, len(seq))
print(seq)
if __name__ == "__main__":
test()
# seq = [1, 3, 2, 4, 0]
# [0, 1, 2, 3, 4]
2470

被折叠的 条评论
为什么被折叠?



