美文网首页
快排查找第k大的数

快排查找第k大的数

作者: wangke | 来源:发表于2018-03-26 19:25 被阅读224次

时间复杂度

时间复杂度与二分查找很相似, 都是只找一边. 但是快排不平衡, 且快排需要计算轴心位置.

二分查找的时间复杂度

二分查找时间复杂度的计算

https://stackoverflow.com/a/8185382

快排查找的时间复杂度

快排查找还需要比较一轮, 确定轴心来划分数组

所以为

O = sum(N + N/2 + N/4 + N/8 + ...)

等比数列求和
Sn = a1(1 - q^n) / (1 - q)

解得
O = 2N

下面是代码:

def _partition(array, left, right):
    pivot = array[left]
    while left < right:
        while (left < right) & (pivot <= array[right]):
            right -= 1
        if left < right:
            array[left] = array[right]
        while (left < right) & (array[left] <= pivot):
            left += 1
        if left < right:
            array[right] = array[left]

    array[left] = pivot
    return left


def _quick_sort_find_kth(array, left, right, k):
    if left < right:
        pivot = _partition(array, left, right)
        if k < pivot:
            _quick_sort_find_kth(array, left, pivot - 1, k)
        elif k > pivot:
            _quick_sort_find_kth(array, pivot + 1, right, k)


def quick_sort_find_kth(array, k):
    if (k < 0) | (k > len(array) - 1):
        return None
    _quick_sort_find_kth(array, 0, len(array) - 1, k)

    return array[k]


if __name__ == '__main__':
    import random

    a = [random.randint(0, 100) for x in range(10)]
    print(a)
    print(quick_sort_find_kth(a, 0))
    print(sorted(a))

相关文章

  • 算法

    查找:二分查找 排序 快排基于快排思想解决的问题partition,第k大的数字 归并 几种排序算法的时间复杂度,...

  • 数组

    第K大的数 第K大的数1.快排:每次返回的是标准的index,当index=k-1时就返回,不是就遍历一边2.堆排...

  • Lua 快速排序

    快排 在一个数组中快速找出第K大的数

  • 快排和利用快排思想查找数组第K大的数

    问题:利用快排思想查找一个数组中第K大的数。 思路:快排中递归调用一个返回第一个数字把数组分成两部分之后的一个下标...

  • 快排查找第k大的数

    时间复杂度 时间复杂度与二分查找很相似, 都是只找一边. 但是快排不平衡, 且快排需要计算轴心位置. 二分查找的时...

  • 查找第 K 大的数

    题目 查找无序整数数组中第 K 大的元素。 示例 输入:[1, 0, 5, -1, 3, 2, 4], 3 输出:...

  • 排序(下):如何用快排思想在 ○(n) 内查找第 k 大元素

    排序(下):如何用快排思想在 ○(n) 内查找第 k 大元素 快排核心思想就是 分治 和 分区,我们可以利用分区的...

  • 数组中第K大的数

    一、相关概念 二、题目 题目 一个未排序的数组中找第k大的数 思路 快排 代码 参考文献 数组中的第K个最大元素

  • TopK问题(快排变形/优先级队列)

    1.数组中第k大/前k大的元素(215-中) 示例: 思路: 法1:快排变形:类似传统快排,区别在于,我们每次进行...

  • 读书笔记17.06.07

    partition函数除了在快排中的其他作用:实现在长度为n的数组中查找第k大的数字 不要死板的认为排序算法时间复...

网友评论

      本文标题:快排查找第k大的数

      本文链接:https://www.haomeiwen.com/subject/wezrcftx.html