1 题目
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
2 解析
(1)方法一
插入排序法,时间复杂度 O ( n 2 ) O(n^2) O(n2)
(2)方法二
单指针交换法。因为只有三种元素,0,1,2。直接将0和1交换到前排就行。
3 python
(1)方法一
def sortColors(self, nums: List[int]) -> None: for i in range(1,len(nums)): temp = nums[i] j = i-1 while temp<nums[j] and j>=0: nums[j+1] = nums[j] j-=1 # 注意下标是j+1 nums[j+1] = temp
(2)方法二
def sortColors(self, nums: List[int]) -> None: p = 0 for i in range(len(nums)): if nums[i]==0: nums[i],nums[p] = nums[p],nums[i] p+=1 for i in range(len(nums)): if nums[i]==1: nums[i],nums[p] = nums[p],nums[i] p+=1