实在检查不出来了.... 程序目的是产生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); }
展开
全部