题目
思路
彩虹排序。
先把数组用partition分割成两部分,然后分别递归两部分。
代码
class Solution:
"""
@param colors: A list of integer
@param k: An integer
@return: nothing
"""
def rainbowSort(self, colors, left, right, colorLeft, colorRight):
if colorRight <= colorLeft: return 0
if right <= left: return 0
colorMid = colorLeft + (colorRight - colorLeft) // 2
oriLeft = left; oriRight = right
while left <= right:
while left <= right and colors[left] <= colorMid: left += 1
while left <= right and colors[right] > colorMid: right -= 1
if left <= right:
colors[left], colors[right] = colors[right], colors[left]
left += 1; right -= 1
self.rainbowSort(colors, oriLeft, right, colorLeft, colorMid)
self.rainbowSort(colors, left, oriRight, colorMid + 1, colorRight)
def sortColors2(self, colors, k):
# write your code here
self.rainbowSort(colors, 0, len(colors) - 1, 1, k)