该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不太明白你想用什么算法。好像是冒泡排序。作为单向链表,这类需要交换元素的方法都很麻烦。
我这儿给一个直接插入到一个新链表中的方法。没写注释,如果看不懂,我再补充。
#include
#include
#include
struct student
{
int num;
struct student * next;
};
struct student *sort(struct student *p)
{
struct student *sorted = NULL;
while (p != NULL)
{
struct student *q = sorted;
if(q == NULL)
{
sorted = q = p;
p = p->next;
q->next = NULL;
}
else
{
if (p->num < sorted->num)
{
q = p;
p = p->next;
q -> next = sorted;
sorted = q;
}
else
{
struct student *tmp;
while (q->next != NULL && p->num > q->next->num)
q = q->next;
tmp = q->next;
q->next = p;
p = p->next;
q->next->next = tmp;
}
}
}
return sorted;
}
#define N 20
int main()
{
int i;
struct student stdnt[N];
struct student *p;
srand((unsigned int)clock());
for(i=0; i
{
int r = i == 0 ? 0 : rand() % i;
stdnt[i].num = stdnt[r].num;
stdnt[r].num = i+1;
stdnt[i].next = &(stdnt[i+1]);
}
stdnt[N-1].next = NULL;
printf("\n");
for(p = stdnt; p != NULL; p = p->next)
printf("%d ", p->num);
printf("\n");
p = sort(stdnt);
for(;p != NULL; p = p->next)
printf("%d ", p->num);
printf("\n");
return 0;
}