我有个问题,有没有好的排序算法问题是这样的,给N个数,N未知,最后结束的时候只要排出最大的n项就行了.N个数不是一次性给的.是一个个有先后 的给出的.每给一个数,都要随时知道现在最大的
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 02:16:24
我有个问题,有没有好的排序算法问题是这样的,给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;
}
链表排序,虽然程序麻烦,但是时间复杂度低,用插入的方法,只需比较到比自己小的数那里,插入到这个数前面.