python3有多少个关键字排序_lintCode 846. 多关键字排序之python实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值