寻找第k大数(快排思想)

原创 2013年12月04日 20:21:56

剔除了相同的数,快排是从小到大排序的,所以k做了处理。

#include <iostream>
#include <cstdio>
using namespace std;

int hash[20000005]={0};
int A[10000005];
int counter=0;
int k;

int partition(int *A,int l,int r)
{
    int x=A[r];
    int i,j;
    int temp;
    i=l-1;
    for (j=l;j<=r-1;j++)
        if (A[j]<=x && j!=i)
        {
            i=i+1;
            temp=A[j];
            A[j]=A[i];
            A[i]=temp;
        }
    temp=A[i+1];
    A[i+1]=A[r];
    A[r]=temp;
    return i+1;
}

int quick_sort(int *A,int l,int r)
{
  int mid;
  mid=partition(A,l,r);
  if (mid==k-1)
    return A[mid];
  else if (mid>k-1)
    return quick_sort(A,l,mid-1);
  else
    return quick_sort(A,mid+1,r);
}

int main()
{
  int n;
  scanf("%d%d",&n,&k);
  int i;
  int a;

  for (i=0;i<=n-1;i++)
  {
    scanf("%d",&a);
    if (!hash[a+10000000])
    {
    	hash[a+10000000]=1;
    	A[counter++]=a;
    }
  }

  k=counter-k+1;
  printf("%d\n",quick_sort(A,0,counter-1));

  return 0;
}



快排算法及利用快排思想寻找第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
  • 1711

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

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

寻找第K大数的方法

寻找一堆数中第K大的数,第一感觉是排序,然后将排序之后的值取第K个。但是实际上,这种方式最少的时间复杂度是O(nlogn)。有更简单的方式可以实现线性的时间复杂度。 算法总是有穷尽的,而思想无穷尽...
  • sinat_22013331
  • sinat_22013331
  • 2016年06月14日 09:25
  • 234

用快速排序法寻找第k大元素

#include #include #include #include using namespace std; // 求首元素、中间元素和尾元素的中位数,将中位数与首元素交换位置 inline v...
  • u011487593
  • u011487593
  • 2015年05月19日 20:52
  • 1216

快排、寻找第k小数和前k小数

首先是代码: #include #include using namespace std; void swap(int &a,int &b) { int t = a; a = b; b...
  • sunmenggmail
  • sunmenggmail
  • 2012年05月13日 09:54
  • 1098

关于利用快排思想求第K小数的分析

最近复习快排算法,记得当时最有意思的是可以用快排的partition函数求出第K小数 于是上网搜索一番,发现都只是贴出了代码。无奈只好自己研究了下 利用快排partition求第k小数不得不从pa...
  • wodehaoyoule
  • wodehaoyoule
  • 2014年11月30日 22:49
  • 657

分治算法求N个数中第K小(大)的数

这个学期开算法课,跟着进度写写代码就好。这周讲分治,说到了求N个数中第K小(大)数的问题,写写看。 分治算法的复杂度是O(n),用到了快速排序的思路:先选取一个参考数进行一次快排,拿升序来说的话,快排...
  • mengfanteng
  • mengfanteng
  • 2014年12月25日 20:43
  • 2039

2016/12/8 1004. 寻找第k大数字(numberk)

这个问题有很多博客讨论了,这里是STL拯救世界,直接构造出了优先序列。以后还是认真看看这个问题吧。 // Problem#: 19855 // Submission#: 4951919 // The...
  • Azure10dai
  • Azure10dai
  • 2016年12月08日 21:14
  • 748

利用快排思想寻找数组中第K大(小)的数字

利用快排的思想寻找数组中第K大(小)的数字。举例:给定一个整数数组num,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。如输入数组[1,3,5,2,2],5,3,返回...
  • u012050154
  • u012050154
  • 2016年11月17日 09:59
  • 872

寻找第k大数字

1003. 寻找第k大数字(numberk)
  • t6_17
  • t6_17
  • 2016年12月10日 14:20
  • 1016
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:寻找第k大数(快排思想)
举报原因:
原因补充:

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