#include<iostream>

 using namespace std;
#define swap(a,b) {int t;t = a;a = b;b = t;}
//节点类型的定义
typedef struct node
{
int data;
node *prior, *next;
}Node, *pNode; void TwoWayBubble(pNode &L);
void CreateList(pNode &L, int n);
void Traverse(pNode L); void TwoWayBubble(pNode &L)
{
pNode head = L;//头
pNode tail = NULL;//尾
pNode p = L->next;
pNode q;
bool exchange = true;//是否交换,并且最后根据是否发生交换来判断循环是否结束 while(exchange)
{
exchange = false;
//大数沉底
while(p->next != tail)//从左往右大数沉底
{
q = p->next;
if(p->data > q->data)
{
exchange = true;//发生了交换
swap(p->data,q->data);
p = q;//p往后移动
}
else p = p->next;//未发生交换,后移
} //小数起泡
p = p->prior;
while(p->prior != head)//从右往左小数冒泡
{
q = p->prior;
if(p->data < q->data)
{
exchange = true;//发生了交换
swap(p->data,q->data);
p = q;//p往前移动
}
else p = p->prior;//未发生交换,前移
}
}
} void CreateList(pNode &L, int n)
{
//头结点的创建
L = new Node;//分配一个节点的空间;
//前驱后继均为空
L->next = NULL;
L->prior = NULL;
pNode p = L;//p指向最后一个节点
int a;
for(int i=; i<n; i++)
{
cin >> a;
pNode pNew = new Node;//分配一个新的节点空间;
p->next = pNew;//连接上上一个节点
pNew->prior = p;//新节点的前驱节点
pNew->next = NULL;//新节点的后继节点
pNew->data = a;//新节点的值域
p = pNew;//p更新
}
} void Traverse(pNode L)
{
pNode p = L->next;
while(p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
} int main()
{
int n;//数据元素个数
pNode L;//双向链表
cin >> n;
CreateList(L,n);//链表的构建
//Traverse(L);
TwoWayBubble(L);//双向冒泡
Traverse(L);//遍历链表
return ;
}

双向链表的双向冒泡排序 c++的更多相关文章

  1. PHP实现冒泡排序、双向冒泡排序算法

    冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...

  2. Problem D: 双向冒泡排序

    Problem D: 双向冒泡排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 447  Solved: 197[Submit][Status][We ...

  3. python 排序冒泡排序与双向冒泡排序

    冒泡排序: 冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法 def bubble_sort(collection): #升序排列 length=len(collecti ...

  4. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  5. [6] 算法路 - 双向冒泡排序的Shaker

    Shaker序列 –算法 1. 气泡排序的双向进行,先让气泡排序由左向右进行.再来让气泡排序由右往左进行,如此完毕一次排序的动作 2. 使用left与right两个旗标来记录左右两端已排序的元素位置. ...

  6. 鸡尾酒排序Cocktail Sort (双向冒泡排序)

    鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都 ...

  7. Java实现双向冒泡排序

    public class BubbleSort_Two { public static void bubbleSort_Two(int[] list){ //j在最外层定义 boolean needN ...

  8. 1.Go语言copy函数、sort排序、双向链表、list操作和双向循环链表

    1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 package main import "fmt" func main() ...

  9. 1.Go-copy函数、sort排序、双向链表、list操作和双向循环链表

    1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 ? 1 2 3 4 5 6 7 8 9 10 11 12 package main   imp ...

随机推荐

  1. c++程序—选择结构

    if(判断条件){执行语句} #include<iostream> using namespace std; #include<string> int main() { ; c ...

  2. 小程序封装API

    一般我们https请求都是通过wx.request来请求,但是这种请求如果多了,页面会混乱不说,还不好管理,因此我将请求单独拎出去,方便管理,也方便后期维护. // api.js const API_ ...

  3. 51nod:天堂里的游戏

    天堂里的游戏 李陶冶 (命题人) System Message (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. ...

  4. 全选checkbox只能执行一次的问题

    现象:第一次运行,点select all那个checkbox,可以全选,再点一次,也可以全部取消.但是,之后不管怎样点击,都没有用了…… <input type="checkbox&q ...

  5. 虚拟 DOM 到底是什么?

    虚拟 DOM 到底是什么? 作者:wangshengliang 注意:由于文章太长,对文章有删减,但是不会影响整体阅读 是什么? 虚拟 DOM (Virtual DOM )这个概念相信大家都不陌生,从 ...

  6. windows中git输错密码后不能修改问题

    坑位 当使用git做代码管理的时候,如果仓库地址地选用的是https,在初始拉取代码时,需要输入账号和密码,如果不小心输错了,后续一直会验证失败,无法再重新更正账号信息 Why 因为git为了不让你每 ...

  7. 五十一、SAP中使程序结构化,模块化

    一.我们创建3个引用单元,这3个单元里面分别存放定义相关,执行相关和子程序相关的内容 二.将程序中的各部分都拆分到INCLUDE文件中,DEF文件内容如下 三.INC文件内容 四.MAIN文件中写程序 ...

  8. 8. Redis 持久化对生产环境的灾难恢复的意义

    1.故障发生的时候会怎么样2.如何应对故障的发生 很多同学,自己也看过一些redis的资料和书籍,当然可能也看过一些redis视频课程 所有的资料,其实都会讲解redis持久化,但是有个问题,我到目前 ...

  9. input防抖动

    input及时搜索,输入一个字符就去处理请求数据.但是还没有输入完就开始频繁请求,进行处理 <body> <input id="put"/> </bo ...

  10. (排序EX)P1583 魔法照片

    题解: 需要注意的是,快排完之后并不是按照编号从小到大的顺序输出 #include<iostream>using namespace std;int r=0;void swap(int & ...