双向链表的双向冒泡排序、红白蓝砾石排序、算法设计4-5

news2024/12/28 5:21:36

(PS:直接拿的友友zy的)

一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com

Time of completion:2023.1.1
Last edited: 2023.1.1

 

目录

(PS:直接拿的友友zy的)

双向链表的双向冒泡排序

第1关:双向链表双向冒泡排序

任务描述

相关知识

编程要求

测试说明

参考代码

 红白蓝砾石排序

第1关:红白蓝砾石排序

任务描述

相关知识

编程要求

测试说明

参考代码

 算法设计4-5

第1关:调整负值

任务描述

相关知识

编程要求

测试说明

参考代码

第2关:快排查找

任务描述

相关知识

编程要求

测试说明

参考代码

作者有言


双向链表的双向冒泡排序

第1关:双向链表双向冒泡排序

任务描述

本关任务:有n个记录存储在带头结点的双向链表中,现用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向冒泡排序即相邻两趟排序向相反方向冒泡)。

相关知识

为了完成本关任务,你需要掌握:双向冒泡排序算法的思想。

编程要求

根据提示,在右侧编辑器补充代码

测试说明

平台会对你编写的代码进行测试:

参考代码

#include <iostream>
using namespace std;
# define OK 1;
typedef int ElemType; 

typedef struct node
{
	ElemType data;
 	struct node *prior,*next;
}node,*LinkList;

void CreateDlink(LinkList &L)
{
	int i,n;
	LinkList rear,p;
	L=new node;
	L->next=NULL;
	rear=L;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		p=new node;		
		cin>>p->data;
		p->next=NULL;
		rear->next=p;
		p->prior=rear;		
		rear=p;
	}
}

void TwoWayBubbleSort(LinkList L)
//对存储在带头结点的双向链表la中的元素进行双向起泡排序。
{
	
 //###### Begin ###### 
    int exchange = 1;//设标记
    LinkList head = L;//双向链表头,算法过程中是向下起泡的开始结点
    LinkList tail = NULL;//双向链表尾,算法过程中是向上起泡的开始结点
    while(exchange)
    {
        LinkList p = head->next;
        exchange = 0;
        while (p->next != tail)
        {
            if (p->data > p->next->data)
            {
                LinkList temp = p->next; exchange = 1;
                p->next = temp->next; 
                if(temp->next)temp->next->prior = p;
                temp->next = p; p->prior->next = temp;
                temp->prior = p->prior; p->prior = temp;
            }
            else p = p->next;
        }
        tail = p;
        p = tail->prior;
        while (exchange&&p->prior != head)
        {

            if (p->data < p->prior->data)
            {
                LinkList temp = p->prior; exchange = 1;
                p->prior = temp->prior; temp->prior->next = p;
                temp->prior = p; p->next->prior = temp;
                temp->next = p->next; p->next = temp;
            }
            else p = p->prior;
        }
            head = p;
    }
    
    
    // ###### End ######
} //算法结束 

void DlinkOut(LinkList &L)
{
	LinkList p;
	p=L->next;
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}
int main() 			 
{
	LinkList L;
	CreateDlink(L);
	TwoWayBubbleSort(L);
	DlinkOut(L);
	return 0;	
}

 红白蓝砾石排序

第1关:红白蓝砾石排序

任务描述

本关任务:设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。

相关知识

为了完成本关任务,你需要掌握:排序算法的思想。

编程要求

根据提示,在右侧编辑器补充代码

测试说明

平台会对你编写的代码进行测试:

参考代码

#include <iostream>
using namespace std;
# define MAXSIZE 20      //设记录不超过20个
# define OK 1; 
typedef char rectype; 
typedef  struct {                       //定义顺序表的结构
  rectype  r[MAXSIZE+1];   //存储顺序表的向量  r[0]一般作哨兵或缓冲区
  int length ;       //顺序表的长度
}SqList;
void Input(rectype r[],int n)
{
	int i;
	for(i=1;i<=n;i++)
	{
		cin>>r[i];
	}
}
void Output(rectype r[],int n)
{
	int i;
	for(i=1;i<=n;i++)
		cout<<r[i]<<" ";
	cout<<endl;
}

void QkSort(rectype r[],int n)
// r为含有n个元素的线性表,元素是具有红、白和兰色的砾石,用顺序存储结构存储,
//本算法对其排序,使所有红色砾石A在前,白色B居中,兰色C在最后。
{
	//###### Begin ###### 
	int a=0,b=0,c=0;
    for(int i=1;i<=n;i++)
    {
    	if(r[i]=='A') a++;
    	else if(r[i]=='B') b++;
    	else c++;	
	}

	for(int i=1;i<=a;i++)
	  r[i]='A';
	for(int i=a+1;i<a+1+b;i++)
	  r[i]='B';
	for(int i=a+1+b;i<a+1+b+c;i++)
	  r[i]='C';
    
    
    // ###### End ######
}//结束QkSor算法
int main()
{
	SqList L;
	int n;
	cin>>n;
	Input(L.r,n);

	QkSort(L.r,n);
	Output(L.r,n);
}

 算法设计4-5

第1关:调整负值

任务描述

本关任务:编写算法,对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前,要求: ① 采用顺序存储结构,至多使用一个记录的辅助存储空间; ② 算法的时间复杂度为O(n)。

相关知识

为了完成本关任务,你需要掌握:排序算法的思想。

编程要求

根据提示,在右侧编辑器补充代码

测试说明

平台会对你编写的代码进行测试:

参考代码

#include <iostream>
using namespace std;
# define MAXSIZE 20      //设记录不超过20个

typedef  struct {                       //定义顺序表的结构
  int  r[MAXSIZE+1];   //存储顺序表的向量  r[0]一般作哨兵或缓冲区
  int length ;       //顺序表的长度
}SqList;
int ListCreate(SqList &L)
{
	int i=1,n;
	cin>>n;
	while(i<=n)
	{
		cin>>L.r[i];
		i++;
	}
	L.length=n;
}
void process(SqList &L)
{
	//###### Begin ###### 
    int i=1 , j=L.length;
    while(i<j)
    {	
    	while(L.r[i]<0) i++;
    	while(L.r[j]>0) j--;
    if(i<=j)	
		swap(L.r[i],L.r[j]);
	}
    
    
    // ###### End ######
}
void ListOut(SqList L)
{
	int i;
	for(i=1;i<=L.length;i++)
	    cout<<L.r[i]<<" ";
	cout<<endl;
}
int main() 			 
{
	SqList L;
	ListCreate(L);
	process( L );
	ListOut(L);
	return 0;	
}

第2关:快排查找

任务描述

本关任务:借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..n]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。请简要说明算法思想并编写算法。 [题目分析]把待查记录看作枢轴,先由后向前依次比较,若小于枢轴,则从前向后,直到查找成功返回其位置或失败返回0为止。

相关知识

为了完成本关任务,你需要掌握:快速排序算法的思想。

编程要求

根据提示,在右侧编辑器补充代码

测试说明

平台会对你编写的代码进行测试:

参考代码

#include <iostream>
using namespace std;
# define MAXSIZE 20      //设记录不超过20个
# define OK 1;
typedef int datatype;
typedef struct
{
	datatype key;
}RecType;
typedef  struct {                       //定义顺序表的结构
  RecType  r[MAXSIZE+1];   //存储顺序表的向量  r[0]一般作哨兵或缓冲区
  int length ;       //顺序表的长度
}SqList;
void ListCreate(SqList &L)
{
	int i=1,n;
	cin>>n;
	while(i<=n)
	{
		cin>>L.r[i].key;
		i++;
	}
	L.length=n;
}
int index (RecType R[],int low,int high,datatype key)  //key为待查关键字
{
	
 //###### Begin ###### 
    for(int i=low;i<=high;i++)
    {
    	if(key == R[i].key)
    	  return i;
	}
	puts("Not find");
	return 0;
    // ###### End ######
}//index
int main()
{
	SqList L;
	datatype key;
	int loc;
	ListCreate(L);	
	cin>>key;
	loc=index(L.r,1,L.length,key);  //loc是关键字所在位置 
	cout<<loc<<endl;	
}

作者有言

如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

添加USB wifi驱动到RK3568

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、USB接口的wifi芯片二、使用步骤wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植WIFI 联网测试总结前言 在日常开…

CTF-Web渗透(入门|笔记|工具)

php各种漏洞绕过 传送门&#xff1a;https://cloud.tencent.com/developer/article/2127498 php伪协议 详细博客讲解&#xff1a; https://blog.csdn.net/cosmoslin/article/details/120695429 http://hummer.vin/2022/05/10/PHP%E4%BC%AA%E5%8D%8F%E8%AE%AE/ https://ww…

Codeforces Round #833 (Div. 2)

题目链接 A. The Ultimate Square 题意&#xff1a; 给你一个n&#xff0c;表示有n块砖&#xff0c;第i块砖是1*(i/2)&#xff0c;这里是上取整&#xff0c;问你最大能组合成的正方形的边长是多少 思路&#xff1a; 观察样例就会发现是n/2上取整&#xff0c;下面看代码&…

快速了解网络原理

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 局域网和广域网 局域网 局域网组建的方式 广域网 网络通信基础 IP地址 端口号 协议 什么是协议 协议分层 分层模型 OSI七层模型 TCP/IP…

Python解题 - CSDN周赛第18期 - 又见背包

卧床一周&#xff0c;一觉醒来&#xff0c;恍如隔世&#xff0c;做什么事都提不起兴趣&#xff0c;也不知道这算不算后遗症。 本期的题目还是比较简单的&#xff0c;也有几道做过的题。最后一道照搬过来的背包题也是比较经典的01背包了&#xff0c;整体感觉没有什么值得说的&am…

linux常用命令(四)- 文件备份解压缩

查看压缩文件信息 - zipinfo zipinfo命令用于列出压缩文件信息。 语法 zipinfo [-12hsvz][压缩文件]-1 只列出文件名称。-2 此参数的效果和指定"-1"参数类似&#xff0c;但可搭配"-h",“-t"和”-z"参数使用。-h 只列出压缩文件的文件名称。-s…

c++11 标准模板(STL)(std::deque)(四)

定义于头文件 <deque> std::deque 元素访问 访问指定的元素&#xff0c;同时进行越界检查 std::deque<T,Allocator>::at reference at( size_type pos ); const_reference at( size_type pos ) const; 返回位于指定位置 pos 的元素的引用&#xff0c;有边…

如何在PVE(Proxmox)中安装OpenWrt软路由?

出处&#xff1a; https://www.928wang.cn/archives/1763.html https://blog.itwk.cc/post/pve_install_openwrt.html 工具准备 WinSCP或者XFTPOpenWrt镜像(自行寻找)安装好PVE的主机一台 安装教程 镜像上传 将下载好的OpenWrt img镜像上传到 PVE主机中(这里使用XFTP工具) 选…

MySQL中的DDL、DML、DCL、DQL

SQL分类 DDL(Data Definition Language)数据定义语言 用来定义数据库对象&#xff1a;数据库&#xff0c;表&#xff0c;列等。关键字&#xff1a;create, drop,alter 等 DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字&#xff1a;i…

vue-element-表格 Excel 【导入】功能 (2023元旦快乐~~~)

一、页面表格导入功能 我们借鉴vue-element-admin文件来学习表格导入功能,如果你有vue-element-admin的完整文件&#xff0c;可以去这里找 or 用我这里的代码 1. 整体复制到你要用到的页面 <template><div class"app-container"><upload-excel-com…

unreal engine 纹理动态运动的实现

先用ps涉及一张图,发光的地方为白色 下图实际上边缘是相连的白色 split_line.jpgue新建材质 基础色vector3 随便选择一个偏灰的颜色 自发光 TextureCoordirate ->Panner->图片rgb->*发光常量 * 20自发光 预览效果 通过修改纹理协调器的V垂直平铺控制条纹数量 image.pn…

mybatis插件

Configuration组成 Mapper映射器 3个部分组成&#xff1a; MappedStatement 保存一个节点(select | insert | update | delete) &#xff0c;包括我们配置的sql&#xff0c;&#xff0c;sql的id&#xff0c;&#xff0c;缓存信息&#xff0c;&#xff0c;resultMap,parameterT…

Redis高并发锁(三)分布式锁

在很多情况下&#xff0c;你的数据库不支持事务&#xff0c;分布式部署也使得你无法去使用JVM锁&#xff0c;那么这种时候&#xff0c;你可以考虑用分布式锁 文章目录分布式锁1. 实现方式2. 特征3. 操作4. 代码改造5. 测试优化1. 递归改成循环2. 防止死锁3. 防误删4. LUA脚本 保…

Arduino code for RS-365PW 16120

Pictures These pictures are from Baidu Search. Picture 1: Installment Picture 2: Appearance Picture 3: Encoder of Motor Picture 4: Pins location and number Physical Specification Brand: Mabuchi Motor (万宝至电机)Type: RS-365PW 16120 Body length&#xff1…

学生抢课接口(高并发入门)

目录 使用Mysql 常规测试 张三测试 流程总结 redis优化 修改代码 测试 使用分布式锁 总结 使用Mysql 常规测试 原始代码: Override Transactional public ResponseResult selectCourse(SelectParmas selectParmas) {if (Objects.isNull(selectParmas)){return new …

【python游戏】新的一年快来变身兔兔战士打败獾守护兔兔吧~

前言 大家早好、午好、晚好吖 ❤ ~ 一只快乐兔&#xff0c; 来到快乐山&#xff0c;喝了快乐泉&#xff0c; 又到快乐殿&#xff0c;吃了快乐莲&#xff0c;遇到快乐仙&#xff0c; 听了快乐言&#xff1a;快乐很简单&#xff0c;快乐在身边&#xff0c;快乐无极限&#xff…

C++中STL的vector扩容机制

目录前言发生扩容扩容机制size()和capacity()reserve()和resize()前言 前阵子面试的时候&#xff0c;被问到往vector中插入一个数据可能会发生什么&#xff1f; 我答:可能会扩容; 为啥vector支持变长&#xff1f; 我答:它实在堆上动态申请内存&#xff0c;因此有自己的一套扩容…

Redis集群系列十 —— 集群伸缩之收缩

集群收缩原理 集群收缩就是让其中一些节点安全下线。 所谓的安全下线指的是让一个节点下线之前&#xff0c;把其负责的所有 slots 迁移到别的节点上&#xff0c;否则该节点下线后其负责的 slots 就没法继续提供服务了。 收缩流程如下&#xff1a; 需求 前面扩容完成后&…

字符串大小写转化,有序数组二分查找个人心得等若干内容

tips 1. 在电脑里面&#xff0c;任何一切字符&#xff0c;当一看到的时候&#xff0c;脑子里面就要把它转化成ACSII值。如while(0)&#xff0c;可以实现死循环。 2. 统计整形数组的长度不能用strlen()&#xff0c;别一天到晚用到底&#xff0c;strlen统计的是字符数组的长度 …

在wsl下开发T113的主线linux(1)-准备wsl开发环境

首先在win10或win11下安装wsl&#xff0c;选择wsl1或者wsl2都可以&#xff0c;wsl2的性能更高一些&#xff0c;wsl1的跨系统文件操作速度更快一些&#xff0c;我这里因为有一些工程在win文件系统下&#xff0c;所以选择了wsl1&#xff0c;发行版使用最新的Ubuntu 22.04.01 LTS。…