漠水 发表于 2014-11-3 22:13:38

c++单链表利用冒泡函数排序,懂的指点一下,谢谢

本帖最后由 风之残月 于 2014-11-9 22:33 编辑

看看算法哪里错了,谢谢


void paixu (h *head) //冒泡函数排序链表
{
int n;
h *r,*p ,*q,*p1;
r=head;
p=r->next;
if(p==NULL)printf("\n空表,无需排序\n");
else if(p->next==NULL)printf("\n一个数无需排列\n");
else for(q=p=r->next;q->next!=NULL;p=q,q=q->next) //这里是让当循环一次后q指向下一个节点,p=q,执行到链表结束,相当于2个for循环
{
while(p->next!=NULL)
{ p1=p->next;
if(p->n<p1->n) //if语句:当前一个数小于后一个数是换位。
n=p->n;
p->n=p1->n;
p1->n=n;
}
p=p->next;
}

}

machimilk 发表于 2014-11-3 22:13:39

试试这样能不能达到预期

void paixu(h *head)
{
        h *p,*q;//定义2个临时链表指针
        int temp;//定义一个操作链表里面值的临时变量
      //p指向表头,当p不为空的时候,循环指向下一个结点
        for(p=head;p!=NULL;p=p->next)
        {
                //q指向p结点的下一个结点,当q不为空的时候q指向q的下一个结点
                for(q=p->next;q!=NULL;q=q->next)
                {
                        //比较这2个相邻结点里面的数据大小
                        //如果前一个结点里面的数据大,就交换2个结点里面的数据值
                        if(p->n > q->n)
                        {
                                temp=q->n;//temp取后面结点里面的小值
                                q->n=p->n;//q里面的大值放后面的结点
                                p->n=temp;//小值放靠前的结点
                        }
                }
        }
}
页: [1]
查看完整版本: c++单链表利用冒泡函数排序,懂的指点一下,谢谢