Problem1875--【排序】8-2 基于双向链表的双向冒泡排序法

1875: 【排序】8-2 基于双向链表的双向冒泡排序法

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 1  Solved: 1
[Submit] [Status] [Web Board] [Creator:]

Description

有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向冒泡排序即相邻两趟排序向相反方向冒泡)。

Input

多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。

Output

每组数据输出一行,为从小到大排序后的序列。每两个元素之间用空格隔开。

Sample Input Copy

5
4 5 3 2 9
6
1 3 5 7 9 2
0

Sample Output Copy

2 3 4 5 9
1 2 3 5 7 9

HINT

#include<iostream>
using namespace std;
typedef struct DuLNode
{
    int data;
    struct DuLNode *prior,*next;
}DuLNode,*DulinkList;
void CreateList(DulinkList &L,int n)
{//建立双向循环链表

    L=new DuLNode;    //初始化链表L的头结点
    L->prior=L;
    L->next=L;
    DulinkList r=L;     //工作指针r初始化指向头结点
    while(n--)
    {
        DulinkList p=new DuLNode;
        cin>>p->data;
        p->next=r->next;
        r->next=p;
        p->prior=r;
        p->next->prior=p;
        r=p;
    }
}
void DuplexSort(DulinkList L)
{//对存储在带头结点的双向链表L中的元素进行双向冒泡排序
/**************begin************/




    /**************end************/
}
void PrintList(DulinkList L)
{//依次输出链表中的数据
    DulinkList p=L->next;
    while(p->next&&p->next!=L)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<p->data<<endl;
}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0) break;
        DulinkList L;
        CreateList(L,n);
        DuplexSort(L);      //双向冒泡排序
        PrintList(L);
    }
    return 0;
}

Source/Category