求第k小的数若不计空间时间复杂度,直接排序并取出第k大的数即可
若考虑时间空间复杂度,就用快速选择算法,n个数,按五个一组分为n/5组,不够的补零,在这些数组中求得中位数并放入新数组中,求出这个中位数数组的中位数,计为最终中位数x,然后将剩下的数组里的数分为小于x的以及大于x的,若要求的k个数大于小于的这部分的个数,就删掉小于的这部分的数,记住个数,在大于的那部分里找,否则就在小于的数组里取第k个数。
一些表达不清楚,个人笔记勿喷!
求第k小的数若不计空间时间复杂度,直接排序并取出第k大的数即可
若考虑时间空间复杂度,就用快速选择算法,n个数,按五个一组分为n/5组,不够的补零,在这些数组中求得中位数并放入新数组中,求出这个中位数数组的中位数,计为最终中位数x,然后将剩下的数组里的数分为小于x的以及大于x的,若要求的k个数大于小于的这部分的个数,就删掉小于的这部分的数,记住个数,在大于的那部分里找,否则就在小于的数组里取第k个数。
一些表达不清楚,个人笔记勿喷!