为什么使用数组元素查找最大数字的程序不起作用?



访问 https://www.interviewbit.com/problems/largest-number/以获取问题...

现在我写了下面的代码来解决这个问题(虽然我用了一个数组来存储数字,稍后会做字符串存储部分......-

所以在这个算法中,我基本上使用了快速排序,但有一个转折,我改变了大于或小于两个数字的定义,比如 X、Y,这样如果首先使用 X 和 Y 第二或 XY 形成的数字是>= YX,那么大于 (X, Y( 为真

在当前情况下,代码给出运行时错误,我不明白为什么,经过一些调试,如注释所示,答案仍然没有按预期出现。

#include <iostream>
#include <vector>
#include <cmath>
#include <stdlib.h>
#include <time.h>
using namespace std ;
bool greaterthan(int a,int b)
{
int n1,n2,s1,s2;
n1=((int )log10(a))+1;
n2=((int)log10(b))+1;

s1=a*((int )pow(10,n2))+b;
s2=a + ((int )pow(10,n1))*b;
if(s1>=s2){return true;}
else{return false;}
}
int spartitions(vector<int >&B,int s , int e)
{
int pivot = B[e];
int pin =s;
int i;
for(i=s;i<=e;i++)  //if i change this to i<e 
{
if(B[pin]>=pivot)
{swap(B[pin],B[i]);
pin++;
}
// and add swap(B[pin],B[e]);
}
return pin-1;           // and return pin here  then it works but not give correct output
}

int prand(vector<int >&B,int s ,int e)
{
srand(time(NULL));
int n = rand()%(e-s+1)+s;
swap(B[n],B[e]);
int pin = spartitions(B,s,e);
return pin;
}




void qsort(vector<int >&B,int s, int e )
{
if(s<e){
int p= prand(B,s,e);
qsort(B,s,p-1);
qsort(B,p+1,e);
}
}
vector<int> largestnumber(vector<int >&A)
{
int n =A.size();
vector<int >B(n);
B=A;
qsort(B,0,n-1);
return B;
}

int main()
{
int n;
cin>>n;
vector<int>A(n);
int i;
for(i=0;i<n;i++)
{
cin>>A[i];
}
vector<int >B(n);
B=largestnumber(A);
for(i=0;i<n;i++)
{
cout<<B[i];
}

}

请帮忙,因为我是编程新手,无法在 3-4 小时内弄清楚这一点......??

如果有人只能纠正我的代码而不给出不同的算法,我将不胜感激,因为我希望这个算法得到纠正。

你自己编写的qsort函数递归调用自己,这会向堆栈添加更多的东西,而堆栈只有这么多空间。当列表太大时,堆栈中将有太多函数调用并溢出。这就是为什么第一个输入(对于n(小于 5 的任何值都可以正常工作,但是一旦超过该值,就会出现运行时错误。请考虑不使用递归函数调用。

编辑: 启用优化似乎也可以解决此问题。 这可能不起作用,具体取决于编译器及其优化方式。(适用于MSVC(

最新更新