Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取第n个最大数字_C++_Sorting_Cout - Fatal编程技术网

C++ 获取第n个最大数字

C++ 获取第n个最大数字,c++,sorting,cout,C++,Sorting,Cout,我尝试获取数组的第n个最大数,我尝试对数组进行排序,然后通过索引访问第n个数;我编写了以下代码: #include <iostream> using namespace std; int largest(int a[],int k){ for (int i=0;i<=(sizeof(a)/sizeof(*a));i++){ for (int j=i+1;j<=(sizeof(a)/sizeof(*a));j++){ if(a[j]&

我尝试获取数组的第n个最大数,我尝试对数组进行排序,然后通过索引访问第n个数;我编写了以下代码:

#include <iostream>
using namespace std;
int largest(int a[],int k){

   for (int i=0;i<=(sizeof(a)/sizeof(*a));i++){
      for (int j=i+1;j<=(sizeof(a)/sizeof(*a));j++){

         if(a[j]>a[i]){
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
         }
      }
   }
   return a[k-1];
}

int main()
{
   int a[]={3,2,1,0,5,10};
   int m=largest(a,4);
   cout<<m<<endl;

   return 0;
}
#包括
使用名称空间std;
最大整数(整数a[],整数k){

对于(int i=0;i而言,问题在于使用
sizeof(a)/sizeof(*a)
获取数组的元素数。
sizeof(a)
是指针的大小

您需要将数组的大小传递给函数

int largest(int a[], int size, int k){

   for (int i=0;i<size;i++){
      for (int j=i+1;j<size;j++){

      ...
      }
   }
}

问题在于使用
sizeof(a)/sizeof(*a)
获取数组的元素数。
sizeof(a)
是指针的大小

您需要将数组的大小传递给函数

int largest(int a[], int size, int k){

   for (int i=0;i<size;i++){
      for (int j=i+1;j<size;j++){

      ...
      }
   }
}
#包括
#包括
使用名称空间std;
int main()
{
int a[]={3,2,1,0,5,10};
std::sort(a,a+6,greater());//对6个元素的数组按最大一级排序。
不能包含
#包括
使用名称空间std;
int main()
{
int a[]={3,2,1,0,5,10};
std::sort(a,a+6,greater());//对6个元素的数组按最大一级排序。

cout您的代码有三个问题

首先,当您将数组作为参数传递给函数时,它会衰减为指针。因此,如果没有其他信息,函数永远无法知道数组的大小。查找数组的大小并将该信息传递给
最大的()
,是
main()
的工作

其次,代码中有一个off by one错误,因为您试图从
0
迭代到数组中的元素数

以下工作将起作用:

#include <iostream>
using namespace std;
int largest(int a[],int k, int n){
   for (int i = 0; i < n; i++){
      for (int j = i + 1; j < n; j++){
         if (a[j] > a[i]){
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
         }
      }
   }
   return a[k-1];
}

int main()
{
   int a[] = {3, 2, 1, 0, 5, 10};
   int k = 4;
   int m = largest(a, k, sizeof a/ sizeof *a);
   cout << m << endl;
}
#包括
使用名称空间std;
最大整数(整数a[],整数k,整数n){
对于(int i=0;ia[i]){
int temp=a[i];
a[i]=a[j];
a[j]=温度;
}
}
}
返回[k-1];
}
int main()
{
inta[]={3,2,1,0,5,10};
int k=4;
int m=最大值(a、k、大小为a/大小为*a);

cout您的代码有三个问题

首先,当您将数组作为参数传递给函数时,它会衰减为指针。因此,如果没有其他信息,函数永远无法知道数组的大小。查找数组的大小并将该信息传递给
最大的()
,是
main()
的工作

其次,代码中有一个off by one错误,因为您试图从
0
迭代到数组中的元素数

以下工作将起作用:

#include <iostream>
using namespace std;
int largest(int a[],int k, int n){
   for (int i = 0; i < n; i++){
      for (int j = i + 1; j < n; j++){
         if (a[j] > a[i]){
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
         }
      }
   }
   return a[k-1];
}

int main()
{
   int a[] = {3, 2, 1, 0, 5, 10};
   int k = 4;
   int m = largest(a, k, sizeof a/ sizeof *a);
   cout << m << endl;
}
#包括
使用名称空间std;
最大整数(整数a[],整数k,整数n){
对于(int i=0;ia[i]){
int temp=a[i];
a[i]=a[j];
a[j]=温度;
}
}
}
返回[k-1];
}
int main()
{
inta[]={3,2,1,0,5,10};
int k=4;
int m=最大值(a、k、大小为a/大小为*a);

coutUPD:可以使用STL算法:std::nth\u元素

#include <iostream>
#include <algorithm>
int main(){
    int arr[] = {54, 897, 87, 4, 6,987};
    size_t length = 6, k = 3;
    std::cout<<std::nth_element(arr, arr + k, arr + length, std::greater<int>());
}
#包括
#包括
int main(){
int arr[]={54897,87,46987};
尺寸t长度=6,k=3;
std::cout middle)i++;
而(a[j]如果(iUPD:有STL算法可使用:std::nth\u元素

#include <iostream>
#include <algorithm>
int main(){
    int arr[] = {54, 897, 87, 4, 6,987};
    size_t length = 6, k = 3;
    std::cout<<std::nth_element(arr, arr + k, arr + length, std::greater<int>());
}
#包括
#包括
int main(){
int arr[]={54897,87,46987};
尺寸t长度=6,k=3;
std::cout middle)i++;
而(a[j]if(i)如果希望
a[0]
成为最大的元素,则需要对数组进行相反的直接排序。问题是,我认为它不是按升序或降序排序;它获取a本身的索引,而不对其进行排序。查看。Your
sizeof(a)
为您提供了指针的大小,而这不是您在该上下文中想要的大小。如果数组包含重复项怎么办?在修复您自己的数组后,您应该查看一下,如果您想要
a[0],您需要以相反的方向对数组进行排序
成为最大的元素。问题是,我认为它不是按升序或降序排序;它获取a本身的索引,而不进行排序。查看。您的
大小(a)
为您提供了指针的大小,而这不是您在该上下文中想要的。如果数组包含重复项怎么办?在修复您自己的数组后,您应该看看omg,谢谢您这么做!但是如果我想计算数组的长度而不将其作为参数放入函数中,有没有办法?!@Mee,您可以使用大小作为非类型参数的函数模板。请参见使用非类型模板参数获取数组大小。您可以使用类似的方法实现
最大值
。omg非常感谢您的帮助!但是如果我想计算数组的长度而不将其作为参数放入函数中,该怎么办有办法吗?@Mee,你可以使用一个函数模板,它的大小作为非类型参数。请看,它使用一个非类型模板参数来获取数组的大小。你可以使用类似的方法来实现
最大的
std::partial_sort
仍然比需要做更多的工作,最好使用你是对的,是的。我编写了som算法,与第n个元素的工作方式相同。
std::partial\u sort
仍然比需要做更多的工作,最好使用您是对的,是的。我写了一些算法,与第n个元素的工作方式相同。