#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. NO14 快照-克隆-必须掌握的Linux目录结构

    壹  VMware克隆,快照讲解及相应问题讲解: ·快照:比喻:假设把人生作一个快照.1岁10岁20岁6无限还原到前一个设置的节点. ·克隆学习一般用链接克隆,不另外占用磁盘,但是依赖本体虚拟机.完整 ...

  2. mybatis update set 多个字段

    <update id="updateCustomer" parameterType="com.entrym.domain.Customer"> UP ...

  3. 与Power BI一起使用Cortana

    使用此页面测试您的Cortana卡.https://app.powerbi.com/cortana/test 文档: 使用Power BI为Cortana创建自定义答案页https://powerbi ...

  4. select2 智能补全模糊查询select2的下拉选择框使用

    我们在上篇文章中已经在SpringMVC基础框架的基础上应用了BootStrap的后台框架,在此基础上记录select2的使用. 应用bootstrap模板 基础项目源码下载地址为: SpringMV ...

  5. AS经济Essay写作想拿高分其实并不难!

    在ALEVEL经济学这门课中,最难的部分应该属于essay question部分,因为很多题目的问题方式是很多变的,考官对于考生的期望值要求也是非常高的. 很多学生觉得自己清楚题目中的知识点,但是最终 ...

  6. Bean Java配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  7. Apache NiFi Processor实战

    1 前言 Apache NiFi是什么?NiFi官网给出如下解释:“一个易用.强大.可靠的数据处理与分发系统”.通俗的来说,即Apache NiFi 是一个易于使用.功能强大而且可靠的数据处理和分发系 ...

  8. python刷LeetCode:28. 实现 strStr()

    难度等级:简单 题目描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ( ...

  9. JS ~ Promise 对象

    Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. Promise.all(iterable) 这个方法返回一个新的promise对象,该promise对象在i ...

  10. ROS常见问题(二) 运行文件时报错environment variable ' ###_MODEL' is not set

    作者在配置pibot机器人时报错: Invalid <arg> tag: environment variable 'PIBOT_MODEL' is not set. Arg xml is ...