Go寻找数组中最小的k个数——全部排序和部分排序

本文介绍了在Go中寻找数组中最小的k个数的两种方法:一是使用全部排序,通过快速排序算法实现;二是部分排序,通过选择排序求解,时间复杂度为O(nk)。详细解析了快速排序和选择排序的思路,并提供了相关代码分析。
摘要由CSDN通过智能技术生成

不忘初心,砥砺前行 

作者 | 陌无崖

转载请联系授权 

导语

今天分享的是数组中寻找k个最小数的解题思路,分别是全部排序和部分排序,一起来看看吧~

题目要求

有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能的低。

解法一:利用全部排序

对于这种方法,我们只需要对我们的数组进行排序,然后取出前k个数就行了。那么对于全部排序,为了更加迅速我们使用快速排序的方法,因为快速排序的时间复杂度为O(nlogn),因此对于在n远大于k的情况下,此方法的时间复杂度为O(nlogn) + O(k) = O(nlogn),下面我们开始分析快速排序.

快速排序的思想

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序列。

听起来有点晦涩难懂,简单来说就是对于一个数组,我们随便找一个数字,将这个数字和其它数字进行比较,比它大的放右边,比它小的放左边。然后就分成了两个数组,通过同样的方法将其余的两个数组进行找数字,排序,每个数组又得到两个数组,一直循环通过以上的方式,最终一定会出现只包含两个数字的数组,因为已经排好序,并且小的一直放在右边,大的一直在左边,规并之后就是一个排好序的数组。

如果还不太明白,可以看下面的一张图篇:

排序流程

(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值