自己练习的找第K大的数。

原创 2016年05月30日 15:59:26

用的是快排的思想,可以实现前k个最大的数。

/**
 * Created by kyle on 2016/5/30.
 */
public class KstNumber {

    static int  partioion(int[] array, int start, int end, int k ){
        int result;
        int i= start;
        int j = end;
        int reference = array[start];
        do{
            while(array[j]>reference && i<j) j--;
            if(i< j) array[i++] = array[j];
            while(array[i]<= reference &&  i< j) i++;
            if(i<j) array[j--]= array[i];
        }while(i< j);
        array[i]= reference;
        if(i == k){
            System.out.println("over");
            return  array[i];
        }
        if( i < k){
            return  partioion(array,i+1, end, k);
        }else {
            return  partioion(array, start, i-1, k);

        }
    }



    static  public  void main(String[] args){
        int[] a= {12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5};
        int num = partioion(a,0, a.length-1, 4);
        System.out.println("the kst number is "+num);
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

寻找第K大的数(快排思想)

使用快排思想找第K大的数,算法复杂度O(n)。1.以数组a的第0位a[0]为参考基准base,将数组划分为两个部分; 如果找第K大的数,则将大于base的数往前挪,将小于base的数往后挪。如果找第...
  • yingyujianmo
  • yingyujianmo
  • 2016年04月15日 22:27
  • 2241

求数组中第K大的数

使用快排,第一趟快排过后,右边的元素都比枢轴大,左边的都比枢轴小。当我们要求第K大的数,只需要左边的元素个数是len-k,len是数组总长度。 第一次快排下来,设枢轴位置是mid,如果mid>k,说...
  • liang0000zai
  • liang0000zai
  • 2015年06月25日 15:52
  • 837

《算法导论》选择问题(找第K大的数)

选择问题(Selection Problem),即在n个元素的集合中寻找第K小的元素的问题。
  • Draco_mystack
  • Draco_mystack
  • 2017年04月18日 22:24
  • 939

寻找第k大数字

1003. 寻找第k大数字(numberk)
  • t6_17
  • t6_17
  • 2016年12月10日 14:20
  • 1013

算法-寻找第K大的数的方法总结

转载:http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大...
  • wangwangfish
  • wangwangfish
  • 2012年10月15日 21:36
  • 9139

经典算法题:无序整数数组中找第k大的数

经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。 【解法一】先排序,然后输出第k个位置上的数 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速...
  • wangbaochu
  • wangbaochu
  • 2016年10月27日 21:02
  • 4097

在BST中找到第k大的数

找出BST中第k大的数: 如果中序遍历BST(左子树->根节点->右子树)可以得到从小到大的数字序列。要求第k大的元素,得到从大到小的数字序列最好了。根据前面的提示访问顺序为右子树->根节点->左子...
  • f81892461
  • f81892461
  • 2013年03月06日 22:14
  • 2093

快排算法及利用快排思想寻找第k大(小)的数

#include #include using namespace std; void Swap(int &a, int &b) { int p = a; a = b; b = p; } ...
  • u010312436
  • u010312436
  • 2016年06月29日 18:14
  • 1709

寻找无序数组中第k大的数

对于一个无序的数组,怎样找到其中第k大的数呢?下面总结几种方法。1.直接排序法使用常见的归并排序、堆排序等算法对数组进行排序,然后找到第k大的数。排序算法的时间复杂度为O(nlogn),所以算法总的时...
  • yc461515457
  • yc461515457
  • 2016年04月18日 10:39
  • 2482

第k大的数——分治法

问题描述: 初阶:有两个数组A和B,假设A和B已经有序(从大到小),求A和B数组中所有数的第K大。 进阶:有N台机器,每台机器上有一个有序的大数组,需要求得所有机器上所有数中的第K大。注意...
  • TommyZht
  • TommyZht
  • 2015年05月30日 10:26
  • 701
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己练习的找第K大的数。
举报原因:
原因补充:

(最多只允许输入30个字)