我有一个排序算法
def partition(competitors, left, right):
pivot = competitors[left]
i = left + 1
j = right - 1
while True:
if (i <= j and competitors[j] > pivot):
j -= 1
elif (i <= j and competitors[i] < pivot):
i += 1
elif (competitors[j] > pivot) or (competitors[i] < pivot):
continue
if i <= j:
competitors[i], competitors[j] = competitors[j], competitors[i]
else:
competitors[left], competitors[j] = competitors[j], competitors[left]
return j
def quick_sort(competitors, left, right):
if ((right - left) > 1):
p = partition(competitors, left, right)
quick_sort(competitors, left, p)
quick_sort(competitors, p + 1, right)
def transformation(competitors):
competitors[1] = - int(competitors[1])
competitors[2] = int(competitors[2])
return [competitors[1], competitors[2], competitors[0]]
if __name__ == '__main__':
number = int(input())
competitors = [transformation(input().split()) for _ in range(number)]
quick_sort(competitors, left=0, right=len(competitors))
print(*(list(zip(*competitors))[2]), sep="\n")这里
pivot = competitors[left]审阅者说,我可以得到一个支点除以数组中的第一个索引和最后一个索引。我尝试了很多选择,其中之一就是
pivot = competitors[left // right]但是输出是错误的
在这里描述任务
**让我们得到左和右两个指针,分别出现在段的左端和右端。然后,我们将左指针向右移动,直到它触发小于枢轴的元素的警报。类似地,我们将右指针移向左侧,而它位于超过引用one.As的元素上,结果表明,所有元素都准确地属于第一组,而右侧则属于第二组。带有指针的元素是无序的。让我们交换它们(大多数编程语言使用swap()函数)并将指针提前到下一个元素。我们将重复这一行动,直到左、右碰撞。**
Input:
5
alla 4 100
gena 6 1000
gosha 2 90
rita 2 90
timofey 4 80
Output:
gena
timofey
alla
gosha
ritaAnd my output is: gena
timofey
alla
<rita>
<gosha>请帮我找出解决这个算法的方法
发布于 2022-06-06 18:12:54
这是一种新的算法,我用透视=竞争对手(左+右) // 2字符串更新了它
def partition(competitors, left, right):
if right <= left:
return
pivot = (left + right) // 2
part = competitors[pivot]
begin = left
end = right
while begin <= end:
while part > competitors[begin]:
begin += 1
while part < competitors[end]:
end -= 1
if begin <= end:
competitors[begin], competitors[end] = competitors[
end], competitors[begin]
begin += 1
end -= 1
partition(competitors, left, end)
partition(competitors, begin, right)
def quick_sort(competitors):
partition(competitors, 0, len(competitors) - 1)
return [line[2] for line in competitors]
if __name__ == '__main__':
n = int(input())
competitors = [None] * n
for x in range(n):
login, Pi, Fi = input().split()
competitors[x] = (-int(Pi), int(Fi), login)
result = quick_sort(competitors)
print(*result, sep="\n")https://stackoverflow.com/questions/72507409
复制相似问题