首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何将指数除以大量

我如何将指数除以大量
EN

Stack Overflow用户
提问于 2022-06-05 12:42:33
回答 1查看 80关注 0票数 0

我有一个排序算法

代码语言:javascript
复制
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")

这里

代码语言:javascript
复制
pivot = competitors[left]

审阅者说,我可以得到一个支点除以数组中的第一个索引和最后一个索引。我尝试了很多选择,其中之一就是

代码语言:javascript
复制
pivot = competitors[left // right]

但是输出是错误的

在这里描述任务

**让我们得到左和右两个指针,分别出现在段的左端和右端。然后,我们将左指针向右移动,直到它触发小于枢轴的元素的警报。类似地,我们将右指针移向左侧,而它位于超过引用one.As的元素上,结果表明,所有元素都准确地属于第一组,而右侧则属于第二组。带有指针的元素是无序的。让我们交换它们(大多数编程语言​​使用swap()函数)并将指针提前到下一个元素。我们将重复这一行动,直到左、右碰撞。**

代码语言:javascript
复制
Input:
    5
    alla 4 100
    gena 6 1000
    gosha 2 90
    rita 2 90
    timofey 4 80

Output:
    gena
    timofey
    alla
    gosha
    rita
代码语言:javascript
复制
And my output is: gena
                  timofey
                  alla
                 <rita>
                 <gosha>

请帮我找出解决这个算法的方法

EN

回答 1

Stack Overflow用户

发布于 2022-06-06 18:12:54

这是一种新的算法,我用透视=竞争对手(左+右) // 2字符串更新了它

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72507409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档