C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题
给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。
翻转(arr,i):将数组从0反转为i
示例:
输入:arr[]={23、10、20、11、12、6、7}
输出:{6、7、10、11、12、20、23}
输入:arr[]={0,1,1,0,0}
输出:{0,0,0,1,1}
方法:与传统排序算法不同,传统排序算法试图以尽可能少的比较进行排序,其目标是以尽可能少的反转对序列进行排序。
这个想法是做一些类似于选择排序的事情。我们一个接一个地将最大元素放在末尾,并将当前数组的大小减少一个。
以下是详细步骤。设给定数组为arr[],数组大小为n。
对每个curr_size执行以下操作:
(1)查找arr[0到curr_szie-1]中最大元素的索引。让索引为“mi”;
(2)翻转(arr,mi);
(3)翻转(arr,curr_size–1);
2 源代码
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{private static int PSP_Ceil_Search(int[] arr, int low, int high, int x){if (x <= arr[low]){return low;}if (x > arr[high]){return -1;}int mid = (low + high) / 2;if (arr[mid] == x){return mid;}if (arr[mid] < x){if (mid + 1 <= high && x <= arr[mid + 1]){return mid + 1;}else{return PSP_Ceil_Search(arr, mid + 1, high, x);}}if (mid - 1 >= low && x > arr[mid - 1]){return mid;}else{return PSP_Ceil_Search(arr, low, mid - 1, x);}}private static void PSP_Flip(ref int[] arr, int i){int temp, start = 0;while (start < i){temp = arr[start];arr[start] = arr[i];arr[i] = temp;start++;i--;}}private static void PSP_Insertion_Sort(ref int[] arr, int size){for (int i = 1; i < size; i++){int j = PSP_Ceil_Search(arr, 0, i - 1, arr[i]);if (j != -1){PSP_Flip(ref arr, j - 1);PSP_Flip(ref arr, i - 1);PSP_Flip(ref arr, i);PSP_Flip(ref arr, j);}}}}
}
第二部分:
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{private static int PSP_Find_Maxium(int[] arr, int n){int mi=0;for (int i = 0; i < n; i++){if (arr[i] > arr[mi]){mi = i;}}return mi;}public static void Pancake_Sort(ref int[] arr, int n){for (int curr_size = n; curr_size > 1; curr_size--){int mi = PSP_Find_Maxium(arr, curr_size);if (mi != curr_size - 1){PSP_Flip(ref arr, mi);PSP_Flip(ref arr, curr_size - 1);}}}}
}

3 源程序
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
public static partial class Algorithm_Gallery
{
private static int PSP_Ceil_Search(int[] arr, int low, int high, int x)
{
if (x <= arr[low])
{
return low;
}
if (x > arr[high])
{
return -1;
}
int mid = (low + high) / 2;
if (arr[mid] == x)
{
return mid;
}
if (arr[mid] < x)
{
if (mid + 1 <= high && x <= arr[mid + 1])
{
return mid + 1;
}
else
{
return PSP_Ceil_Search(arr, mid + 1, high, x);
}
}
if (mid - 1 >= low && x > arr[mid - 1])
{
return mid;
}
else
{
return PSP_Ceil_Search(arr, low, mid - 1, x);
}
}
private static void PSP_Flip(ref int[] arr, int i)
{
int temp, start = 0;
while (start < i)
{
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
start++;
i--;
}
}
private static void PSP_Insertion_Sort(ref int[] arr, int size)
{
for (int i = 1; i < size; i++)
{
int j = PSP_Ceil_Search(arr, 0, i - 1, arr[i]);
if (j != -1)
{
PSP_Flip(ref arr, j - 1);
PSP_Flip(ref arr, i - 1);
PSP_Flip(ref arr, i);
PSP_Flip(ref arr, j);
}
}
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
public static partial class Algorithm_Gallery
{
private static int PSP_Find_Maxium(int[] arr, int n)
{
int mi=0;
for (int i = 0; i < n; i++)
{
if (arr[i] > arr[mi])
{
mi = i;
}
}
return mi;
}
public static void Pancake_Sort(ref int[] arr, int n)
{
for (int curr_size = n; curr_size > 1; curr_size--)
{
int mi = PSP_Find_Maxium(arr, curr_size);
if (mi != curr_size - 1)
{
PSP_Flip(ref arr, mi);
PSP_Flip(ref arr, curr_size - 1);
}
}
}
}
}
相关文章:
C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出:…...
13.西瓜书——半监督学习
1.概述 (1) 纯半监督学习 (Pure Semi-Supervised Learning) 纯半监督学习是一种典型的半监督学习方法,它的主要特点是同时利用有标签数据和无标签数据进行模型训练。目标是通过整合这两种类型的数据来提高模型的泛化性能。在这个过程中&#…...
C++进阶之路---继承(二)
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。 class Student; class Per…...
C及C++每日练习(3)
选择题: 1.以下程序的输出结果是() #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A.6 B. 6789 C. 6 D.789 对于本题࿰…...
黑马点评-附近商户实现
GEO数据结构 Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,根据经纬度来检索数据。 GEO本质上是基于sortedSet实现的,在Sorted Set中,每个成员都是与一个分数(score)相关联的,这个分数用于对成员进行排序…...
安装nginx:手动安装和yum安装
本文在centos7.9下分别尝试了yum安装和手动安装,记录一下试验过程。为后来者少踩点坑。 下载 下载地址:链接 。建议下载稳定版本,也就是Stable Version,这里下载的是 nginx-1.24.0 # 我下载在如下文件夹 mkdir/opt/apps cd /op…...
【C++ STL详解】——string类
目录 前言 一、string类对象的常见构造 二、string类对象的访问及遍历 1.下标【】(底层operator【】函数) 编辑 2.迭代器 3.范围for 4.at 5.back和front 三、string类对象的容量操作 1.size 和 length 2.capacity 3.empty 4.clear 5.res…...
MatplotlibPython 1 3.7
放大数据,如果想仔细看某一行的数据的时候 可以调不同的颜色,图片的长宽高,以及线的种类 plt.figure 这个命令下的所有东西都在这个figure里面 plt.xlim 改变坐标轴的范围 plt.xlabel 改变坐标轴的总名称 plt.xticks 换单位 plt.yt…...
深入理解 Dubbo:构建分布式服务治理体系
目录 1. 介绍 2. Dubbo 的核心概念 2.1 服务提供者(Provider)与服务消费者(Consumer) 2.2 注册中心(Registry) 2.3 监控中心(Monitor) 3. Dubbo 的功能特性 3.1 远程调用&…...
唤起原生IOS和安卓Android app的方法
大家好我是咕噜美乐蒂,很高兴又和大家见面了! 要唤起原生 iOS 或 Android 应用程序,你可以使用以下方法: 唤起原生 iOS 应用程序 在 iOS 上,你可以使用自定义 URL 方案或 Universal Links 来唤起原生应用程序。以下…...
RabbitMQ的web控制端介绍
2.1 web管理界面介绍 connections:无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况channels:通道,建立连接后,会形成通道,消息的投递、获取…...
GitHub登不上:修改hosts文件来解决(GitHub520,window)
参考链接:GitHub520: 本项目无需安装任何程序,通过修改本地 hosts 文件,试图解决: GitHub 访问速度慢的问题 GitHub 项目中的图片显示不出的问题 花 5 分钟时间,让你"爱"上 GitHub。 (gitee.com) GitHub网站…...
01-DevOps代码上线-git入门及gitlab远程仓库
一、准备学习环境 10.0.0.71-gitlab 2c2g-20GB 10.0.0.72-jenkins 2c2g-20GB 10.0.0.73-sonarqube 1c1g-20GB 10.0.0.74-nexus 1c1g-20GB 10.0.0.75-dm 1c1g-20GB (模拟写代码服务器) 在centos系统中&…...
EdgeX Foundry 安全模式安装部署
文章目录 一、安装准备1.官方文档2. 克隆服务器3.安装 Docker4.安装 docker-compose 二、安装部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.org.cn/docs…...
网络安全-appcms-master
一、环境 gethub上面自己找appcms-master 二、分析一下源码以及闯关思路 首先是有一个函数循环以及函数过滤,我们的post会将我们所传的所有val值去进行一个循环,之后通过htmlspecialchars这个函数进行过滤和转换所以val值不能通过单双引号闭合注入的方…...
ThreadLocal 与 synchronized 区别
我的理解 目的都是为了一个大前提:操作内容的线程安全。 任务不同:synchronized 解决的是多线程下线程操作权限的问题,以及原子性的保证。通过对锁的竞争,达到对资源的访问有序。 ThreadLocal是解决的事多线程下资源的隔离问题,即…...
灵魂指针,教给(二)
欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组…...
线程安全--浅谈Ad-hoc与加锁的区别
浅谈Ad-hoc 与加锁 两者要解决的都是对对象的语义混乱操作,即有个count进行累加操作。 我的理解/文心一言的反馈如下: 加锁是保证我们对同一个count在多线程下的访问有序,即“读写-修改-写入”具有原子性。 而Ad-hoc机制就是通过程序员自己定义一个私有…...
数据治理实战——翼支付金融板块业务数仓建设和数据治理之路
目录 一、数据治理背景 二、数据治理建设内容 2.1 组织协同 2.2 平台建设 2.3 数据应用治理 2.4 数据规范 2.5 数据安全 三、企业级数仓建设 3.1 调研阶段 2.2 平台护航 2.3 数仓分层 2.4 维度建模 2.4.1 维度建模四步曲 2.4.2 命名规范 2.4.3 资产沉淀 2.4.4 …...
[Buuctf] [MRCTF2020]Transform
1.查壳 64位exe文件,没有壳 2.用64位IDA打开 找到主函数,F5查看伪代码 从后往前看,有一个判断语句,是两个数组进行比较的,我们双击byte_40F0E0查看里面的内容 所以能够推出byte_414040的内容,byte_4140…...
Mac用户如何通过12306ForMac实现高效抢票?四个核心功能详解
Mac用户如何通过12306ForMac实现高效抢票?四个核心功能详解 【免费下载链接】12306ForMac An unofficial 12306 Client for Mac 项目地址: https://gitcode.com/gh_mirrors/12/12306ForMac 还在为节假日抢不到火车票而烦恼吗?作为Mac用户…...
Parsec VDD:Windows虚拟显示器终极解决方案,免费扩展你的数字工作空间
Parsec VDD:Windows虚拟显示器终极解决方案,免费扩展你的数字工作空间 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在当今多任务处理日益普及的数字时代…...
终极解决方案:如何在MusicBee中完美获取网易云音乐同步歌词
终极解决方案:如何在MusicBee中完美获取网易云音乐同步歌词 【免费下载链接】MusicBee-NeteaseLyrics A plugin to retrieve lyrics from Netease Cloud Music for MusicBee. 项目地址: https://gitcode.com/gh_mirrors/mu/MusicBee-NeteaseLyrics 还在为Mus…...
3分钟掌握中兴光猫终极管理工具:zteOnu工厂模式一键开启指南
3分钟掌握中兴光猫终极管理工具:zteOnu工厂模式一键开启指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu zteOnu是一款专为中兴光猫设备设计的强大管理工具,…...
Qwen3-ASR-1.7B开源模型实践:微调适配特定行业口音与专业词汇指南
Qwen3-ASR-1.7B开源模型实践:微调适配特定行业口音与专业词汇指南 1. 项目概述 Qwen3-ASR-1.7B是阿里云通义千问团队开源的中量级语音识别模型,相比之前的0.6B版本,在识别准确率上有了显著提升。这个模型特别擅长处理复杂的长难句和中英文混…...
Qwen3.5-2B开源大模型落地:非遗纹样图片→文化内涵解读+设计建议
Qwen3.5-2B开源大模型落地:非遗纹样图片→文化内涵解读设计建议 1. 引言:当AI遇见非遗文化 非遗纹样是中华文化的重要载体,但传统解读方式面临两大难题:一是专业人才稀缺,二是设计转化效率低。Qwen3.5-2B作为轻量化多…...
冰雪传奇三职业深度解析!官方认证下支持安卓、iOS、PC 三端互通
风华经典手游平台是国内知名游戏门户网站官网经典IP端游授权开发1:1复刻手游,用户可通过风华经典手游官网获取游戏及资讯礼包码,官网设置专属游戏客服提供游戏服务!本次为各位新手玩家带来《冰雪传奇三职业》提起传奇,…...
智能体AI前景光明但挑战重重,企业级系统构建要素有哪些?
智能体AI:现状与挑战 在多智能体企业系统中,哪些技术、设计、标准、开发方法和安全实践正蓬勃发展?为此咨询了专家。智能体AI已成为软件行业新宠,其自主性不断增强,有望提升企业效率。Shopify应用机器学习主管Andrew M…...
《JVS-APS全景解读:算法驱动+低代码融合的智能排产系统》
引言:制造业排产的“三座大山”制造业生产管理最常被吐槽的三个痛点:紧急插单乱套:销售一个电话进来,计划员就要花半天时间重排所有工序,越改越乱资源冲突频发:设备、模具、人员同时被多个订单争抢…...
告别黑盒:手把手教你用AssetStudio查看并导出Unity打包后的游戏UI与图片素材
告别黑盒:手把手教你用AssetStudio查看并导出Unity打包后的游戏UI与图片素材 当你被一款游戏的精美UI设计所吸引时,是否好奇过这些视觉元素是如何实现的?作为UI设计师或独立开发者,学习逆向分析成熟作品的资源结构,是提…...
