class Solution:
"""
@param array: the input array
@return: the sorted array
"""
def multiSort(self, array):
self.quickSort(array, 0, len(array) - 1, 1, False)
left, right = 0, 1
while right < len(array):
left, right, hasSame = self.sortSameScore(array, left, right)
if hasSame:
self.quickSort(array, left, right - 1, 0, True)
left = right
right += 1
return array
def quickSort(self,arr, left, right, index, reverse):
if left < right:
base = self.helper(arr, left, right, index, reverse)
self.quickSort(arr, left , base - 1, index, reverse)
self.quickSort(arr, base + 1, right, index, reverse)
def helper(self,arr,left,right, index, reverse):
base = arr[left]
while left < right:
if not reverse:
while left < right and arr[right][index] <= base[index]:
right -= 1
arr[left],arr[right] = arr[right],arr[left]
while left < right and arr[left][index] >= base[index]:
left += 1
arr[left],arr[right] = arr[right],arr[left]
elif reverse:
while left < right and arr[right][index] >= base[index]:
right -= 1
arr[left],arr[right] = arr[right],arr[left]
while left < right and arr[left][index] <= base[index]:
left += 1
arr[left],arr[right] = arr[right],arr[left]
arr[left] = base
return left
def sortSameScore(self, arr, left, right):
hasSame = False
while right < len(arr) and arr[right][1] == arr[left][1]:
right += 1
if right - left > 1:
hasSame = True
return left, right, hasSame