首页 > 代码库 > 顺序统计中值

顺序统计中值

问题描述:无序找第k小的数?

1、解法一

  先排好序,再找第k小个数;返回A[k-1];此解法的时间复杂度为:O(nlogn);

2、解法二

  情况一:k = 1 和 k = n 就是找数组的最小值和最大值;

  情况二:找出中位数

3、找中位数(随机选择算法)

  利用快速排序的原理,一轮排序,有2种情况:

  if i = k-1;返回a[i];

  if i != k-1;左边/右边递归查找,时间复杂度为:O(n);

具体思想:

技术分享

  分析:在大多数情况下的时间复杂度是:O(n);但是最坏情况,完全顺序下找第k = n-1大数,此时的时间复杂度是:O(n^2);

代码实现

4、线性算法

  (1)、划分为5个一组的元素,在找出每一组的中值(对这5个数进行排序,找出中值),时间复杂度:O(n)

  (2)、用递归去找这些中值中的那一个中值(中值中的中值);

  (3)、此时用这个最中值的下标和k作比较,之后和上面的随机选择算法一样!!!

具体模型如下:

技术分享


算法分析

  找中值和第k小数时间复杂度均为:O(n);比较好的解决了上述最坏时间复杂度为O(n^2)的情况;

  3个元素一组的话,结果不成立;

  5是这个算法能成功的最小数字,7个元素为一组算法也能成立,但是性能不会有所提高;



本文出自 “wait0804” 博客,请务必保留此出处http://wait0804.blog.51cto.com/11586096/1899152

顺序统计中值