#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;
}
1201

被折叠的 条评论
为什么被折叠?



