双向链表的双向冒泡排序 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 ...
随机推荐
- Spark技术学院-进去能学到啥?
Spark技术学院是什么? 主要是浪尖,前腾讯现阿里的大神一起搞的知识分享基地,旨在帮助大家由入门到精通spark,hbase,kafka大数据重要的框架,还有给入门小白指点入门方法,分享入门资料,对 ...
- 12 MySQL存储过程与函数
存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合. 调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,提高数据处理 ...
- NO9 Linux快捷键整理及最常用命令
Linux快捷键整理及最常用命令 常用快捷键: Ctrl + u 删除光标之前到行首的字符 Ctrl + k 删除光标之前到行尾的字符 Ctrl + c ...
- DIV 透明度 设置
filter:alpha(opacity=70); -moz-opacity:0.70;-khtml-opacity: 0.70; opacity: 0.70;
- 重装系统,新安装IDEA启动项目后,classnotfound:com.mysql.jdbc.Driver
我最后解决是:这个Test connection会自动帮你下载的,但是如果中途一直叫你try again,甚至到后面点这个test connection有弹窗,但是单窗里面的选项你点击后没反应,我是直 ...
- 167-PHP 文本分割函数str_split(二)
<?php $str='PHP is a very good programming language'; //定义一个字符串 $arr=explode(' ',$str,-3); //使用空格 ...
- bool之regexp正则注入(原理详解)
感谢原创博主的文章,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5717442.html 我们都已经知道,在MYSQL 5+中 informati ...
- Web基础之Maven
Web基础之Maven Maven是一个优秀的项目管理工具,可以很轻松的管理项目. POM和LifeCycle POM:Project Object Model.也就是项目模型,简单来说就是对项目进行 ...
- vue-router 二级路由(父子路由)
使用二级路由 会显示父路由下面的子路由 且父子路由同时显示 因为父子同时显示 路由地址在同一级别/ 路由的显示模式有两种(都是为了减少数据库后台请求次数) #hash模式(#是特殊字符,很多场合不 ...
- fork系统调用方式成为负担,需要淘汰
微软研究人员发表论文称用于创建进程的 fork 系统调用方式已经很落后,并且对操作系统的研究与发展产生了极大的负面影响,需要淘汰,作者同时提出了替代方案.相信每位开发者都对操作系统中的 fork () ...