两个快速排序实现,不同的比较

2024-04-25 13:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:

我一直在尝试计算在快速排序实现(下面的代码)中进行的比较的数量,但是我注意到只有当我去掉下面一行中的粗体部分时,比较的数量才被正确地计算出来。你知道吗

左\u比较,左\u列表=快速\u排序(未排序的\u列表[:i-1],l,i-2)

我有两个问题要问:

  1. 为什么粗体字会影响所做的总体比较?你知道吗
  2. 为什么输入列表[l:r+1]有时长度为0?这个算法不应该确保基本情况中总是有一个元素吗?你知道吗

美元

def quick_sort(unsorted_list, l, r):
    if len(unsorted_list[l:r + 1]) <= 1:
        return 0, unsorted_list
    else:
        # choose_pivot(input_list)   # TODO implement properly later. cd return input_list here.
        pivot = unsorted_list[l]

        i = l + 1
        num_comparisons = r - l

        for j in xrange(l + 1, r + 1):
            if unsorted_list[j] < pivot:
                temp = unsorted_list[i]
                unsorted_list[i] = unsorted_list[j]
                unsorted_list[j] = temp
                i += 1

        unsorted_list[l] = unsorted_list[i - 1]
        unsorted_list[i - 1] = pivot

        left_comparisons, left_list = quick_sort(unsorted_list[:i - 1], l, i - 2)
        right_comparisons, right_list = quick_sort(unsorted_list, i, len(unsorted_list) - 1)

        return left_comparisons + num_comparisons + right_comparisons, left_list[:i - 1] + [pivot] + right_list[i:]

Tags: right列表input数量lenreturnif排序