颜色分类
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色
2种方法,方法1亏快排,方法二双指针
class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
if len(nums) <= 1:
pass
self.quick_sort(nums, 0, len(nums) - 1)
def quick_sort(self, nums, l, r):
if l > r:
return
i, j = l, r
tem = nums[l]
while i < j:
while i < j and nums[j] >= tem:
j -= 1
nums[i] = nums[j]
while i < j and nums[i] <= tem:
i += 1
nums[j] = nums[i]
nums[i] = tem
self.quick_sort(nums, l, i-1)
self.quick_sort(nums, i+1, r)
p1, p2, i = 0, len(nums) - 1, 0
while i <= p2:
while i < p2 and nums[i] == 2:#注意这里必须先判断nums[i]是否等于2再执行下面的if循环,因为像[0,2,1]这种,当执行2和1交换后,下标1出此时变为了0,所以我们需要再判断下下标1是否为0,也就是下面的if nums[i] == 0
nums[p2], nums[i] = nums[i], nums[p2]
p2 -= 1
if nums[i] == 0:
nums[p1], nums[i] = nums[i], nums[p1]
p1 += 1
i += 1