我有个问题,有没有好的排序算法问题是这样的,给N个数,N未知,最后结束的时候只要排出最大的n项就行了.N个数不是一次性给的.是一个个有先后 的给出的.每给一个数,都要随时知道现在最大的
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/08 09:50:06
![我有个问题,有没有好的排序算法问题是这样的,给N个数,N未知,最后结束的时候只要排出最大的n项就行了.N个数不是一次性给的.是一个个有先后 的给出的.每给一个数,都要随时知道现在最大的](/uploads/image/z/12050196-60-6.jpg?t=%E6%88%91%E6%9C%89%E4%B8%AA%E9%97%AE%E9%A2%98%2C%E6%9C%89%E6%B2%A1%E6%9C%89%E5%A5%BD%E7%9A%84%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E9%97%AE%E9%A2%98%E6%98%AF%E8%BF%99%E6%A0%B7%E7%9A%84%2C%E7%BB%99N%E4%B8%AA%E6%95%B0%2CN%E6%9C%AA%E7%9F%A5%2C%E6%9C%80%E5%90%8E%E7%BB%93%E6%9D%9F%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AA%E8%A6%81%E6%8E%92%E5%87%BA%E6%9C%80%E5%A4%A7%E7%9A%84n%E9%A1%B9%E5%B0%B1%E8%A1%8C%E4%BA%86.N%E4%B8%AA%E6%95%B0%E4%B8%8D%E6%98%AF%E4%B8%80%E6%AC%A1%E6%80%A7%E7%BB%99%E7%9A%84.%E6%98%AF%E4%B8%80%E4%B8%AA%E4%B8%AA%E6%9C%89%E5%85%88%E5%90%8E+%E7%9A%84%E7%BB%99%E5%87%BA%E7%9A%84.%E6%AF%8F%E7%BB%99%E4%B8%80%E4%B8%AA%E6%95%B0%2C%E9%83%BD%E8%A6%81%E9%9A%8F%E6%97%B6%E7%9F%A5%E9%81%93%E7%8E%B0%E5%9C%A8%E6%9C%80%E5%A4%A7%E7%9A%84)
我有个问题,有没有好的排序算法问题是这样的,给N个数,N未知,最后结束的时候只要排出最大的n项就行了.N个数不是一次性给的.是一个个有先后 的给出的.每给一个数,都要随时知道现在最大的
我有个问题,有没有好的排序算法
问题是这样的,
给N个数,N未知,最后结束的时候只要排出最大的n项就行了.
N个数不是一次性给的.是一个个有先后 的给出的.
每给一个数,都要随时知道现在最大的n个数
.
直接每次来个数,都做比较插入的话,插入项的后几项每个都要往后移一个,感觉效率不高,有没有什么好的算法.
讲的简单点,就是,比如说,N个数,一个一个的给,我随时喊停,然后我要知道现在最大的5个数(有序),然后我也可以继续报数,随时喊停,随时知道最大几个数的排序.有什么好的算法没有,
我有个问题,有没有好的排序算法问题是这样的,给N个数,N未知,最后结束的时候只要排出最大的n项就行了.N个数不是一次性给的.是一个个有先后 的给出的.每给一个数,都要随时知道现在最大的
#include
#include
typedef struct a{
int data;
struct a *next;
}A;
int main()
{
int i,j;
A *s,*p,*S,*t; //s为链表,S为链表头,p为新建结点,t为s前一个结点
s=(A *)malloc(sizeof(A));
t=(A *)malloc(sizeof(A));
t->next=NULL;
S=s;s->next=NULL;
printf("请输入数字(输入-1结束输入):");
scanf("%d",&i);
while(i!=-1)
{
p=(A *)malloc(sizeof(A));
p->next=NULL;
p->data=i;
if(s->next==NULL)
s->next=p;
else
{
while(s->next!=NULL)
{
t=s;
s=s->next;
if(i>s->data)
{
t->next=p;
p->next=s;
s=t;
break;
}
}
if(s->next==NULL)
{ s->next=p;}
}
s=S;
scanf("%d",&i);
}
s=S;
printf("请输入要输出几个大数:");
scanf("%d",&j);
while(j>0)
{ s=s->next;
printf("%3d",s->data);
j--;
}
printf("\n");
return 0;
}
链表排序,虽然程序麻烦,但是时间复杂度低,用插入的方法,只需比较到比自己小的数那里,插入到这个数前面.