双向链表的双向冒泡排序 c++
#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++的更多相关文章
- PHP实现冒泡排序、双向冒泡排序算法
冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...
- Problem D: 双向冒泡排序
Problem D: 双向冒泡排序 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 447 Solved: 197[Submit][Status][We ...
- python 排序冒泡排序与双向冒泡排序
冒泡排序: 冒泡排序就是每次找出最大(最小)元素,放在集合最前或最后,这是最简单的排序算法 def bubble_sort(collection): #升序排列 length=len(collecti ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- [6] 算法路 - 双向冒泡排序的Shaker
Shaker序列 –算法 1. 气泡排序的双向进行,先让气泡排序由左向右进行.再来让气泡排序由右往左进行,如此完毕一次排序的动作 2. 使用left与right两个旗标来记录左右两端已排序的元素位置. ...
- 鸡尾酒排序Cocktail Sort (双向冒泡排序)
鸡尾酒排序 鸡尾酒排序思路,先从左边开始进行冒泡排序,第一趟冒泡排序完,最大值在的数组的最右端,然后进行第二趟排序,第二趟排序从右边开始排序,第二趟结束时,最小值在数组最左端,以此类推,每一趟排序完都 ...
- Java实现双向冒泡排序
public class BubbleSort_Two { public static void bubbleSort_Two(int[] list){ //j在最外层定义 boolean needN ...
- 1.Go语言copy函数、sort排序、双向链表、list操作和双向循环链表
1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 package main import "fmt" func main() ...
- 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 ...
随机推荐
- 吴裕雄--天生自然java开发常用类库学习笔记:对象克隆技术
class Person implements Cloneable{ // 实现Cloneable接口表示可以被克隆 private String name ; public Person(Strin ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-forward
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Golang的运算符优先级实操案例
Golang的运算符优先级实操案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.运算符优先级案例 运算符是用来在程序运行时执行数学或逻辑运算的,在Go语言中,一个表达式可以包 ...
- 51nod 1276:岛屿的数量 很好玩的题目
1276 岛屿的数量 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 有N个岛连在一起形成了一个大的岛屿,如果海平 ...
- 13.swoole学习笔记--DNS查询
<?php //执行DNS查询 swoole_async_dns_lookup("www.baidu.com",function($host,$ip){ echo $ip; ...
- 前端安全之 XSS攻击
参看: XSS的原理分析与解剖 前端安全 -- XSS攻击 web大前端开发中一些常见的安全性问题 1.前言 XSS 是面试时,hr提出来给我的,然后大体的浏览一遍,今天才查阅资料大体了解了它. XS ...
- 给element的confirm加自定义指令
问题描述,因为自定义指令一般直接加在页面html标签上,但是element封装好的confirm的确认按钮没法添加自定义指令,如图: 解决办法:加个其他的隐藏标签,监听撤销事件,让其他的标签自动触发c ...
- springboot - 映射HTTP Response Status Codes 到 FreeMarker Error页面
1.总览 2.代码 1).pom.xml 这里注意:springboot 2.2.0以后默认的freemarker文件后缀为:ftlh.本例用的是2.2.1,所以后缀为ftlh <depende ...
- 每天一点点之laravel框架开发 - API通过access_token获取用户id报 Unauthenticated. 错误(passport)
1.首先保证你的config/auth.php 中 guards 的 api 的 driver 选项改为 passport 2.注册中间件,在 app/Http/Kernel.php 文件中的 $ro ...
- 一本通1166 求f(x,n)
[题目描述] 已知 计算x=4.2,n=1以及x=2.5,n=15时f的值. [输入] 输入x和n. [输出] 函数值,保留两位小数. [输入样例] 4.2 10 [输出样例] 3.68 1.看见这种 ...