作业帮 > 综合 > 作业

我有个问题,有没有好的排序算法

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/24 09:17:20
我有个问题,有没有好的排序算法
问题是这样的,
给N个数,N未知,最后结束的时候只要排出最大的n项就行了.
N个数不是一次性给的.是一个个有先后 的给出的.
每给一个数,都要随时知道现在最大的n个数
.
直接每次来个数,都做比较插入的话,插入项的后几项每个都要往后移一个,感觉效率不高,有没有什么好的算法.
讲的简单点,就是,比如说,N个数,一个一个的给,我随时喊停,然后我要知道现在最大的5个数(有序),然后我也可以继续报数,随时喊停,随时知道最大几个数的排序.有什么好的算法没有,
#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;
}
链表排序,虽然程序麻烦,但是时间复杂度低,用插入的方法,只需比较到比自己小的数那里,插入到这个数前面.
再问: 忘了说 我是用的Matlab编程,不支持指针操作. 要是C我早就用链表了 最后想办法用了个类似链表的数据结构做的.确实还是只有链表比较合适啊