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

news2024/12/24 10:57:56

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);
                }
            }
        }
    }
}
 

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

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

相关文章

Prompt Engineering、Finetune、RAG:OpenAI LLM 应用最佳实践

一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲&#xff0c;演讲者为 John Allard 和 Colin Jarvis。演讲中&#xff0c;作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术&#xff0c;但是进行了很好的总结和串联…

Vue+SpringBoot打造天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

从零开始学习Diffusion Models: Sharon Zhou

How Diffusion Models Work 本文是 https://www.deeplearning.ai/short-courses/how-diffusion-models-work/ 这门课程的学习笔记。 文章目录 How Diffusion Models WorkWhat you’ll learn in this course [1] Intuition[2] SamplingSetting Things UpSamplingDemonstrate i…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用&#xff0c;所以与其他的自动配置不同&#xff0c;自动配置是后来使用的&#xff0c;而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单&#xff0c;并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

正则表达式-分组

1、oracle-正则表达式&#xff1a;将09/29/2008 用正则表达式转换成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析&#xff1a;regexp_replace-替换&#xff0c; 第一个参数&#xff1a;需要进行处…

分享7款前端直接使用的项目动画特效(附在线演示)

分享7款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 图片分割组合特效 首先会把图片分割成均匀的小块 之后又会将这些小块拼接组合起来 以下效…

节日专访|「我」是「我」

又到了 Zilliz 一年一度的特别时刻——三八妇女节专访。按照惯例&#xff0c;我们每年都会选定一个话题进行讨论&#xff0c;今年的主题是「我是我」。 我是我&#xff0c; 是生物学上以性别划分的女性&#xff0c; 是在不同职业领域中绽放光彩的工程师、财务、市场运营…… 是…

数据结构从入门到精通——栈

栈 前言一、栈1.1栈的概念及结构1.2栈的实现1.3栈的面试题 二、栈的具体实现代码栈的初始化栈的销毁入栈出栈返回栈顶元素返回栈中的元素个数检测是否为空Stack.hStack.ctest.c 前言 栈&#xff0c;作为一种后进先出&#xff08;LIFO&#xff09;的数据结构&#xff0c;在计算…

力扣大厂热门面试算法题 6-8

6. Z 字形变换&#xff0c;7. 整数反转&#xff0c;8. 字符串转换整数 (atoi)&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.08 可通过leetcode所有测试用例。 目录 6. Z 字形变换 解题思路 边界条件 完整代码 Python Ja…

李想已经5天没发微博了

李想的微博已经5天没更新了。 理想MEGA发布之后的第二天&#xff0c;李想在微博转发了一条某汽车自媒体和理想MEGA设计师BenBaum的访谈视频&#xff0c;并配文表示&#xff0c;Ben的访谈非常好。 不过&#xff0c;在之后的5天时间里&#xff0c;李想的微博便悄无声息了。这与“…

yocto本地离线构建时报错

解决方案&#xff1a;在local.conf中添加 BB_NO_NETWORK "1"禁用网络&#xff0c;从本地downloads中fetch源码

【方法】如何打开7Z分卷压缩文件?

什么是7Z分卷压缩文件&#xff1f;就是在压缩文件时&#xff0c;将文件压缩成若干个大小一样、以“文件名.7z.序号”格式命名的7Z压缩包&#xff0c;可以方便存储和传输&#xff0c;如下图所示。 一、7Z分卷压缩文件如何打开&#xff1f; 我们只需要按照普通压缩包的打开方式&…

智慧园区综合运营数字化解决方案

1. 楼栋管理 2. 物业管理 3. 安防管理 4. 门禁管理 5. 停车管理 6. 能源管理 7. 环保管理 8. 园区生活服务 9. 招商管理 10. 收费中心 11. 园区地图 12. 门户网站 智慧园区软件方案&#xff1a;智慧园区软件解决方案&#xff0c;园区运营管理系统&#xff08;源码&#xff09;-…

DiT:Scalable Diffusion Models with Transformers

TOC 1 前言2 方法和代码 1 前言 该论文发表之前&#xff0c;市面上几乎都是用卷积网络作为实际意义上的&#xff08;de-facto&#xff09;backbone。于是一个想法就来了&#xff1a;为啥不用transformer作为backbone呢&#xff1f; 文章说本论文的意义就在于揭示模型选择对于…

二叉树—层序遍历

102. 二叉树的层序遍历 代码实现&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arrays of size *returnSize.* The sizes of the arrays …

L波段光端机-L波段+CATV射频光端机工作机制及行业应用探究

L波段光端机-L波段CATV射频光端机工作机制及行业应用探究 北京海特伟业任洪卓发布于2023年3月8日 一、何为L波段光端机 L波段光端机是一种用于光通信的设备&#xff0c;其主要工作波长位于L波段&#xff0c;即40~860MHz和950~2600MHz的带宽&#xff0c;可选独立工作于950~260…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

消息队列-Kafka-消费方如何分区与分区重平衡

消费分区 资料来源于网络 消费者订阅的入口&#xff1a;KafkaConsumer#subscribe 消费者消费的入口&#xff1a;KafkaConsumer#poll 处理流程&#xff1a; 对元数据重平衡处理&#xff1a;KafkaConsumer#updateAssignmentMetadataIfNeeded 协调器的拉取处理&#xff1a;onsum…

java常用排序算法——冒泡排序,选择排序概述

前言&#xff1a; 开始接触算法了&#xff0c;记录下心得。打好基础&#xff0c;daydayup! 算法 算法是指解决某个实际问题的过程和方法 排序算法 排序算法指给混乱数组排序的算法。常见的有&#xff1a;冒泡排序&#xff0c;选择排序 冒泡排序&#xff1a; 冒泡排序指在数组…