一个排序问题
有一个比较大的数组,从中取最大值,次大值,个数可以指定,如数组2 3 4 5 5 6 12 4 33 12 19 21 比如取5个数,则为33 21 19 12 12 要求原数组不可以改变
这是我的算法
int * GetTop(const int *array,int size,int length)
{
int *p=new int[length]; //开辟动态数组用于存储,并将被返回
int i,j,k;
int index=0,top=0,count=0;
for(i=j=0;i<size;i++)
{
if(array[i] < array[j])
j=i;
}
*p=array[j]; //原数组的最大值存储在p
for(k=1;k<length;k++) //循环开始
{
index=*(p+k-1);
top=k-1;
count=0;
while(top>=0)
{
if(index==*(p+top))
{
count++;
top--;
}
else break;
} //获取跳过次数
i=j=0;
while(1)
{
if(array[i] < *(p+k-1))
{
i++;
j++;
}
else
if(array[i] == *(p+k-1) && count>0)
{
i++;
j++;
count--;
}
else break;
}
for(;i<size;i++)
{
if(array[i] < *(p+k-1))
continue;
else
if(array[i] == *(p+k-1) && count>0)
{
count--;
continue;
}
if(array[i] < array[j])
{
j=i;
}
}
*(p+k)=array[j];
}
return p;
}
给这个函数传递数组名,数组大小,需要得到的个数
你门都没说怎么算?怒