两个快速实施,不同的比较

时间:2014-12-26 14:28:52

标签: python arrays algorithm sorting quicksort

更新:

我一直在尝试计算快速排序实现中的比较次数(下面的代码),但是我注意到只有当我在下面的行中取出粗体位时才能正确计算比较次数。

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

我有两个问题要问:

  1. 为什么粗体位会影响总体比较?
  2. 为什么input_list [l:r + 1]的长度有时为0?这个算法不应该确保基本情况总是包含1个元素吗?
  3. $

    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:]
    

0 个答案:

没有答案