c语言产生50个伪随机数并用插入法排序,高分!关于链表的插入法排序

本文探讨了一个使用链表存储随机数并进行插入排序的程序问题。程序旨在生成指定数量的随机数,并对其进行排序,但在实际运行中输出的数字数量与预期不符。问题疑似出现在Insertsort函数中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实在检查不出来了.... 程序目的是产生n个随机数储存在链表中,然后对之排序。现在的问题是每次输出的数的个数跟输入的n不相等,比如我希望产生10个随机数并排序输出,实际上运行时只输出了三个。 已经确认是Insertsort函数的问题,但就是找不到错在哪里。。。 代码如下 #in

实在检查不出来了.... 程序目的是产生n个随机数储存在链表中,然后对之排序。现在的问题是每次输出的数的个数跟输入的n不相等,比如我希望产生10个随机数并排序输出,实际上运行时只输出了三个。 已经确认是Insertsort函数的问题,但就是找不到错在哪里。。。 代码如下 #include #include #include #define LEN sizeof(struct List) struct List{ int data; struct List *next;}; struct List *creatlist(int n) //创建链表 { struct List *head,*p1,*p2; int counter=0; p1=p2=(struct List*)malloc(LEN); srand((unsigned int)time(NULL)); head=NULL; while(counterdata=rand()00;} else p2->next=p1; p2=p1; p1=(struct List*)malloc(LEN); p1->data=rand()00; } p2->next=NULL; return (head); } void Insertsort(struct List *head) { struct List *unsorted,*sorted,*p1,*p2; //p1,p2为扫描指针 sorted=head; while(sorted->next!=NULL) {unsorted=sorted->next; if(unsorted->datadata) //要排序的元素比第一个元素小时,将其放到第一个元素之前 {sorted->next=unsorted->next; head=unsorted; unsorted->next=sorted;} else {p2=head; p1=p2->next; while(unsorted->data>p1->data) {p2=p1; p1=p2->next;} //若unsorted组里面的元素比p1指的元素大则p1继续后移 if(unsorted==p1) //到了当前第一个未排序的元素还没遇到比它大的 sorted=unsorted; //放在已排序的数据的最后 else {sorted->next=unsorted->next; p2->next=unsorted; unsorted->next=p1;} } } } void print(struct List *head) //输出链表的函数 { struct List *p; printf("排序后的数为:

"); p=head; if(head!=NULL) do{ printf("%d

",p->data); p=p->next;}while(p!=NULL); } void main() { int n; struct List *head; printf("请输入将排序的随机数字个数n:

"); scanf("%d",&n); head=creatlist(n); Insertsort(head); print(head); }

展开

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值