首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    快速选择算法Golang实现

    类似求TopK问题中最常用的算法中,从时间复杂度最高到中等再到最优分别有不同的做法。在之前的学习中只学到了使用堆来优化TopK问题,但是这样的时间复杂度只能做到O(Nlogk)的大小,其中k是堆的大小。有一种更好的办法是基于快速排序的思想去优化的算法,叫做快速选择算法,它的时间复杂度能够做到O(N)的时间复杂度。这里的思路是:每次通过随机取得一个分区键,假设题目要求数组按照从大到小排序,那么通过将分区键移动到头部start,然后从头部的下一个元素开始遍历数组,遇到比分区键大的元素就交换到分区键后的已排序的下标的下一个位置,该指针假设就叫做index。最后遍历结束后将index的值与start的值交换,此时分区键就被移动到了index指针所指的位置,那么index左边的元素都是比分区键要大的,此时再通过对比index - start 与k的大小关系就可以判断下一次递归要从哪个区间开始,从而减少遍历的次数。

    05
    领券