может кто-нибудь сказать, в чем ошибка в моем коде быстрой сортировки

Новый (в 2014 году) tidyr пакет также делает это просто, при этом gather() / spread() является слагаемыми для melt / cast.

library(tidyr)
spread(dat1, key = numbers, value = value)

Из github ,

tidyr - это перерисовка reshape2, предназначенная для сопровождения аккуратной структуры данных и работающая рука об руку с magrittr и dplyr, чтобы построить сплошной конвейер для анализа данных.

Так же, как reshape2 сделал меньше, чем изменение, tidyr делает меньше, чем reshape2. Он разработан специально для сбора данных, а не для общей перестройки, которую делает reshape2, или общего преобразования, которое изменилось. В частности, встроенные методы работают только для кадров данных, а tidyr не содержит полей или агрегации.

blockquote>

1
задан LzZ 23 March 2019 в 05:09
поделиться

1 ответ

Вот несколько ошибок в вашем коде, и я переписал код для вас. Вы можете обратиться к комментарию и выполнить тест, чтобы выяснить это.

import random

# two pointers solution, choose the last one as pivot
def partition(nums, left, right, pivot):
    while left < right:
        # here should change < to <=, because if pivot is larger than all in nums[left:right+1], should swap nums[left] with nums[pivot]
        # here I change if to while, because you should traverse the pointer to find the place which is invalid in partition
        while left <= right and nums[left] <= nums[pivot]:
            left += 1
        # here I change if to while, same reason above
        while left < right and nums[right] > nums[pivot]:
            right -= 1
        # you should not use elif here, because you have two ifs, the first if does not work here
        if left < right:
            nums[left], nums[right] = nums[right], nums[left]
    nums[left], nums[pivot] = nums[pivot], nums[left]
    return left


def quicksort(nums, low, high, pivot):
    if low < high:
        pos = partition(nums, low, high, pivot)
        quicksort(nums, low, pos - 2, pos - 1)
        # here is another problem: notice that nums[pivot] is the last element, not the nums[high]
        quicksort(nums, pos + 1, high, high + 1)
    return nums


if __name__ == '__main__':
    for _ in range(100):
        nums = [random.randrange(1, 100) for _ in range(10000)]
        n = len(nums)
        if sorted(nums) != quicksort(nums, 0, n - 2, n - 1):
            print('incorrect')
    print('success')

Я старался изо всех сил, чтобы помочь вам, и надеюсь, вам понравится.

0
ответ дан recnac 23 March 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: