现在的位置: 首页 > 综合 > 正文

找数组中的第k个最大数

2013年09月22日 ⁄ 综合 ⁄ 共 663字 ⁄ 字号 评论关闭

// most_k.cpp : 定义控制台应用程序的入口点。
//第k个最大数

#include "stdafx.h"
#include <iostream>
using namespace std;

int k_most(int *a, int n, int k)//n个数组中第k个最大数
{
 if (n==1 && k==1)
 {
  return a[0];
 }
 int x0;
 if (a[0] < a[1])//取一个比较小的,防止特殊情况的发生
 {
  x0 = a[0];
 }
 else
 {
  x0 = a[1];
 }
 int *b = new int[n];//存储x0<=的数
 int *c = new int[n];//存储x0>的数
 int i;
 for (i=0; i<n; i++)//初始化
 {
  b[i] = 0;
  c[i] = 0;
 }
 int b_i=0, c_i=0;
 for (i=0; i<n; i++)
 {
  if (a[i] > x0)
  {
   c[c_i] = a[i];
   c_i++;
  }
  else
  {
   b[b_i] = a[i];
   b_i++;
  }
 }
 if (b_i>=k)//则要找的数在b中
 {
  delete c;
  return k_most(b, b_i, k);
 }
 else
 {
  delete b;
  return k_most(c, c_i, k-b_i);
 }

}

int _tmain(int argc, _TCHAR* argv[])
{
 int a[5]={8,2,3,4,5};
 cout<<k_most(a,5,5)<<endl;
 getchar();
 return 0;
}

 

抱歉!评论已关闭.