【问题标题】:K-th smallest quick sort python第K个最小的快速排序python
【发布时间】:2021-01-06 20:25:23
【问题描述】:

我必须得到未排序数组中的第 K 个最小元素。 不要对整个数组进行排序,我只对包含第 K 个元素的子数组进行排序。然后我打印从 0 到 len(array) 的所有 K-th

array = [6,5,4,3,2,1]
def quick_sort(lst, k):
    if len(lst) <= 1:
        return lst
    else:
        p = (lst[0] + lst[len(lst)-1])/2
        left = [x for x in lst if x <= p]
        right = [x for x in lst if x > p]
        
        if  k > len(left) -1 :
            k = k - len(left)+1
            return quick_sort(right,k)
        else:
            return quick_sort(left, k)
  
for i in range(len(array)):    
    print(*quick_sort(array,i+1))

我想得到 1,2,3,4,5,6 但我的代码是 2,3,5,6,6,6。 我需要改变什么?

附:主要思想是不对所有数组进行排序,也不使用 python 排序函数

【问题讨论】:

  • 这是快速选择,不是快速排序。

标签: python arrays sorting quicksort


【解决方案1】:
array = [6, 5, 4, 3, 2, 1]

def quick_sort(lst, k):
    if len(lst) <= 1:
        return lst
    else:
        p = (lst[0] + lst[-1]) / 2
        left = [x for x in lst if x <= p]
        right = [x for x in lst if x > p]

        if k > len(left):
            k = k - len(left)
            return quick_sort(right, k)
        else:
            return quick_sort(left, k)

for i in range(len(array)):
    print(*quick_sort(array, i + 1))

【讨论】:

  • 你好@Krzysiek 欢迎来到 SO。最好在您的答案中提供必要的信息,例如您的答案如何解决问题以及答案的来源是什么。谢谢。
  • 刚刚修复了第 9-10 行的错误
  • 谢谢。它有效)但不幸的是它没有帮助:(我得到一个时间错误有没有办法提高速度?。例如:也许添加中间 subb_array ?left = [x for x in lst if x p]
猜你喜欢
  • 2017-06-23
  • 2016-02-22
  • 1970-01-01
  • 2021-09-05
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多