请教如何写一个无序链表的排序算法

shadow1123 2008-04-22 11:41:49
请教如何写一个无序链表的排序算法,希望不要用递归。谢了。
...全文
234 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
michaelwangwh 2008-05-08
链表不适合排序
回复
yangiter 2008-05-07
创建一个新的链表,访问无序链表的每个结点,并采取尾插法或头插法插入新链表,得到有序表,呵呵
回复
jieao111 2008-05-07
冒泡
void listmaroplayers(Node* head)
{

int m;
Node* q=head;
Node* tail=NULL;
while(true){
q = head;
for(;q->next!=tail;q=q->next)
if(q->value>q->next->value)
{
m=q->value;
q->value=q->next->value;
q->next->value=m;
}
tail = q;
if(head->next==tail)
break;
}

}
回复
gangjh 2008-05-07
轉為數組再用qsort較簡單
void list_qsort(struct list_head *head, compar comp)
{
void **list ,**p;
struct list_head *pos;

int count = list_count(head) ;
if ( (p=list = (void **) malloc(sizeof(void*) * count))==NULL)
{
return ;
}
list_for_each(head, pos){
*p++ = pos->data ;
}
qsort(list, count, sizeof(void *), comp);
p=list ;
list_for_each(head, pos){
pos->data = *p++ ;
}
free(list);
}
回复
province_ 2008-05-06
大道至简
回复
fangfei_119 2008-05-04

#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node* creat()
{
struct node *h,*p,*q;
int i,n;

printf("输入想创建的节点个数:");
scanf("%d",&n);
h=(struct node *)malloc(sizeof(struct node));
h->data=n;
h->next=NULL;
q=h;
for(i=0;i<n;i++)
{
p=(struct node*)malloc(sizeof(struct node));
printf("input num[%d]:",i);
scanf("%d",&p->data);
p->next=NULL;
q->next=p;
q=p;
}
printf("创建的链表为:");
return h;
}

void print(struct node *head)
{
struct node *p;
p=head->next;
while(p!=NULL)
{
printf("->%d",p->data);
p=p->next;
}
printf("\n");
}

struct node* order(struct node *head)
{
struct node *h,*p,*q;
int i,chg;
h=head;
for(i=0;i<100;i++)
for(q=h->next,p=q->next ;p!=NULL;q=p,p=p->next)
if(q->data>p->data)
{
chg=q->data;
q->data=p->data;
p->data=chg;
}
printf("排序后链表为:");
return h;
}

void main()
{
struct node *head,*head1;
head=creat();
print(head);
head1=order(head);
print(head1);

}

运行结果:
输入想创建的节点个数:6
input num[0]:4
input num[1]:3
input num[2]:5
input num[3]:1
input num[4]:2
input num[5]:6
创建的链表为:->4->3->5->1->2->6
排序后链表为:->1->2->3->4->5->6
Press any key to continue
回复
以后需再关注,现在先帮你顶一下
回复
meiZiNick 2008-04-30
接分是王道!
回复
robertkun 2008-04-25
有 道 理 !
回复
liudianwai 2008-04-25
嗯。冒泡。两两互换。比较容易。
选排快排都不好使了。
回复
rushman 2008-04-23
冒泡吧,比较简单
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-22 11:41
社区公告
暂无公告