先给代码,然后再分析一下两个排序方法
题目描述
建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)
输入
第一行:双向表的长度;
第二行:链表中的数据元素。
输出
输出双向链表中的数据元素的值。
样例输入
10
2 4 6 3 5 8 10 21 12 9
样例输出
2 3 4 5 6 8 9 10 12 21
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct DNode
{
int data;
DNode *prior;
DNode *next;
}DLinklist;
void CreatelistR(DLinklist *&L, int a[], int n)
{
L = (DLinklist *)malloc(sizeof(DLinklist));
DLinklist *s, *r;
L->next = NULL;
r = L;
int i;
for (i = 0; i < n; i++)
{
s = (DLinklist *)malloc(sizeof(DLinklist));
s->data = a[i];
r->next = s;
s->prior = r;
r = s;
}
r->next = NULL;
}
void paixu(DLinklist *&L, int n)
{
int i;
int t;
DLinklist *r;
r = L;
for (i = 0; i < n - 1; i++)
{
while (L->next != NULL)
{
if ((L->data) >(L->next)->data)
{
t = (L->next)->data;
(L->next)->data = L->data;
L->data = t;
}
L = L->next;
}
L = r;
}//for循环不理解
}
int main()
{
int n;
cin >> n;
int a[50];
int i;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
DLinklist *L;
CreatelistR(L, a, n);
L = L->next;
paixu(L, n);
for (i = 0; i < n; i++)
{
if (i == 0)
{
cout << L->data;
}
else
{
cout << " " << L->data;
}
L = L->next;
}
return 0;
}