冒泡排序(单链表实现)

先简单复习一下冒泡排序基本思路:
两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。如果有n个数,那么就要比较n-1趟喽!

写程序之前,小编告诉各位读者:为了提高程序执行效率,专门设置头指针(* _head)和尾指针(* _tail).

void BubbleSort()
{
    Node* p=NULL;
    Node* q=NULL;
    Node* cur=NULL;
    if(_head == NULL)
    {
        return;
    }
    else
    {
        cur=_tail->next;
        while(_head != cur)
        {
            p=_head;
            q=p->next;
            while(q != cur)   //这里控制条件不恰当会使程序造成死循环
            {
                if((p->_data) > (q->_data))
                {
                    swap(p->data,q->data);
                }
                p=p->next;
                q=q->next;
            }
            cur=p;
        }
    }
}

当把程序写完之后,小编发现如果我们遇到{1,0,2,3,4,5,6}这样的序列时,只需要把第一个数据和第二个数据交换即可,不需进行后面的循环工作了,因此要将代码改进一下,增加一个标记标量flag对代码进行优化!

void BubbleSort()
{
    Node* p=NULL;
    Node* q=NULL;
    Node* cur=NULL;
    if(_head == NULL)
    {
        return;
    }
    else
    {
        bool flag=true;
        cur=_tail->next;
        while(_head != cur && flag )
        {
            flag=false;
            p=_head;
            q=p->next;
            while(q != cur)  
            {
                if((p->_data) > (q->_data))
                {
                    swap(p->data,q->data);
                    flag=true;
                }
                p=p->next;
                q=q->next;
            }
            cur=p;
        }
    }
}

你可能感兴趣的:(算法与数据结构,数据结构)