N 个元素的数组,求第K大的元素

 

 

 

 

 

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;



/*N 个元素的数组,求第K大的元素*/


 

/*第一种方法:先对数组进行交换排序(递减),然后返回第K-1位置的元素*/

/*arr为数组,size为数组元素个数,kth是要返回的第kth位*/
int getKth_1(int arr[],int size, int kth)
{
   for(int i=0; i < size-1; i++)
   {
       for(int j=i+1; j<size; j++)
       {
           if(arr[i] < arr[j])
           {
                swap(arr[i], arr[j]);
           }
       }
  }
  return arr[kth-1];
}
/*交换两个元素*/
int swap(int& a, int& b)
{
   int temp;
   temp = a;
   a = b;
   b = temp;
}



/*把前k个元素读入数组并(以递减方式排序),接着,将剩下的元素逐个读入。
当一个读一个新元素时,如果该元素小于数组中第K个元素则胡略,否则就放到正确的位置,
同时将数组中的一个元素返回,当算法终止时,返回第k个位置上的元素*/

/*arr为数组,size为数组元素个数,k是要返回的第k位*/
int getKth_2(int arr[], int size, int k)
{
   /*循环K次*/
   for(int i=0; i<k; i++)
   {
       for(int j=i+1; j<size; j++)
       {
           if(arr[i] < arr[j])
           {
                swap(arr[i], arr[j]);
           }
       }
  }
  
  /*对剩余的元素进行比较*/
  for(int i=k; i<size; i++)
  {
       /*对剩余的元素与arr[k-1]比较*/
       if(arr[i] > arr[k-1])
       {
            int j;
            for(j=0; j<k; j++)
            {
                if(arr[j] < arr[k-1])
                     break;
            }
            for(int m=k-1; m>j; m--)
            {
                arr[m] = arr[m-1];
            }
            arr[j] = arr[k-1];
       }
  }
  return arr[k-1];
}



int main(int argc, char *argv[])
{
    int arr[10000];
    for(int i=0; i<10000; i++)
        arr[i] = i + 1;
 /*   int k1 = getKth_1(arr,10000,10);
    cout<<k1<<endl;*/
    int k2 = getKth_2(arr,10000,10);
    cout<<k2<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

 


 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值