当前位置: 首页 > news >正文

不使用IF语句对一组数进行排序的分析和实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、不使用IF语句的两数排序方法
  • 二、不使用IF的多数排序讨论
    • 1、三数比较和排序
    • 2、多个数据比较和排序
  • 总结


前言

这个题目源于已经完成了不使用IF语句对两个数的比较大小,现在推广一下,能不能不使用IF语句完成一个普通的排序呢?本文就改题目进行一个尝试。


一、不使用IF语句的两数排序方法

我们使用伪代码或者C#进行编码,要求外代码支持所有主流语言的语法,但是不支持IF语句以及三目比较运算符。其实三目比较运算符也是一个变形的IF语句,这个本质上不符合我们的要求。
不使用IF语句的两数比较代码如下:

           int[]  x = new int[] { 100, 90};int [] rslt = new int[2] ;var big  = x[(1 - Math.Sign(x[0] - x[1])) / 2];var small = x[(1 - Math.Sign(x[1] - x[0])) / 2];var result = string.Format("big = {0}, small = {1}", big,small);txt_resutl.Text =  result;

上述方法将大数保存到big中,将小数保存到small中, 这样big 和small就构成一个有序序列,我们的问题是能否利用某种方法扩充这个有序序列,如果可以,那么排序就完成了。

二、不使用IF的多数排序讨论

1、三数比较和排序

不是一般性我们以整数为例进行数据的比较。
那么一个两数的有序序列表示如下

	 int[] ints = new int[] {1, 2,};

现在我们思考,如何将第三个数插入到这个数组中。
分析上面两数比较的过程,可知

1 - Math.Sign(x[0] - x[1])) / 2

表示的是大数数组元素的下标 另外一个是小数组元素的下标,这样得到链表排序的两数比较函数如下:

     static public int[] Compare2Number(int[] n){int[] rsult = new int[2];//for (int i = 0; i < cn.Length; i++)//{//    rsult[i] = cn[i];//}var n1 = n[0];var n2 = n[1];var idxA = (1 - Math.Sign(n1 - n2)) / 2;// the index of greater one var idxB = (1 - Math.Sign(n2 - n1)) / 2;// the index of the less onersult[0] = n[idxA];rsult[1] = n[idxB];return rsult;}

利用两数比较的函数,我们思考如何将第三个数放到这个有序队列 baseN 中。可以将第三个数与有序序列baseN 的第一个元素比较,生成一个新的有序序列 r1, 再将r1的第二个元素与baseN的第二个数进行比较,生成另一个有序序列r2。此时
r1[0], r2[0], r2[1] 就是三个元素的排序结果。

代码如下:

            int[] baseN = new int[] { 1,2};int x3 = 3;var r0 = NoIFSort.Compare2Number(baseN);int[] x1 = new int[2];x1[0] = r0[0];x1[1] = x3;var r1 = NoIFSort.Compare2Number(x1);int[] x2 = new int[2];x2[0] = r1[1];x2[1] = r0[1];var r2 = NoIFSort.Compare2Number(x2);int[] rslt = new int[3];rslt[0] = r1[0];rslt[1] = r2[0];rslt[2] = r2[1];

上述代码将结果整合到一个新的序列中。

2、多个数据比较和排序

三数的比较是将第三个数与有序序列baseN 的第一个元素比较,得到一个2元序列,再将最后一个元素与有序序列的第二个元素比较,再得到一个2元序列,恻然生成一个三元有序序列。可以看出,将这个三元序列作为已知有序序列,就可以比较第四个数。这样推而广之,就可以进行能个数的比较。综上分析,可以写出一个数和n个数进行比较排序的代码:

	      static public int[] GetNewOrderSeq(int newX, int[] nSorted,int nSLen){int[] rsult = new int[nSLen+1];var x = newX;for(int i = 0; i < nSLen; i++){int[] cn = new int[2];cn[0] = x;cn[1] = nSorted[i];var new2Cn = Compare2Number(cn);rsult[i] = new2Cn[0];x=new2Cn[1];}rsult[nSLen] = x;return rsult;}

改函数的功能,将一个新数和已知有序序列进行比较,并且生成一个新的有序序列,nSLen 有序序列的长度。

在该函数的基础上,我们对需要排序的序列进行遍历,将元素从头到位一个一个地插到这个序列中,最终这个序列就是一个排好序的有序序列,从而实现对一组数的排序功能。

代码如下:

            int[] ints = new int[] {1, 2, 4, 3, 5, };int[] nSorted = new int[ints.Length];nSorted[0]=ints[0];for (int i = 1; i < ints.Length; i++){var newX = ints[i];nSorted = NoIFSort.GetNewOrderSeq(newX, nSorted,i);}

上面代码使用两个数组,第一个数组保存需要排序的数据,第二个数组保存排序好的数据。

这样我们在不使用IF语句的限制下,完成了一个数组的排序。

PS: 上述代码在C#调试通过。


总结

不使用IF语句比较两个数的大小是本人在多年以前刚刚开始接触计算机的时候碰到的一个题目,当时使用Basic 实现。去年本人把数据结构又看了一遍深受里面名人大咖思想的影响和鼓舞,就一直想在算法上面做些实验。不使用IF语句进行排序也是最近才有的想法,隐约感觉是可以的。经过半天的探索终于实现,是记。

MaraSun BJFWDQ

相关文章:

不使用IF语句对一组数进行排序的分析和实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、不使用IF语句的两数排序方法二、不使用IF的多数排序讨论1、三数比较和排序2、多个数据比较和排序总结前言 这个题目源于已经完成了不使用IF语句对两个数的比…...

在大厂做了5年测试,3月被无情辞退,想给摸鱼的兄弟提个醒

先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;17 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成了一次…...

【职业规划】第二篇:程序员分级之中级程序员

Java程序员的分级并没有统一的标准,以下列举出来的只是我所理解的关于Java工程师的划分标准,不喜勿喷,如有建议,欢迎评论或私信。 二、Java中级程序员(又名:Java中级工程师/Java中级开发) 1.级别介绍与职责 简单一句话总结中级程序员就是:知道是什么。 具体些就是,…...

Studio One没有声音怎么办 Studio One工程没有声音

Studio One是一款非常优秀编曲软件&#xff0c;能够帮助用户高效的进行编曲和创作&#xff0c;也是目前主流的通道机架软件之一&#xff0c;受到很多音乐编曲爱好者的追捧。但是很多刚接触这款软件的小伙伴会碰到这样或者那样的问题&#xff0c;比如Stuidio one没有声音怎么办&…...

x86架构利用docker去编译arm64的应用程序

文章目录1. 交叉编译&#xff1a;toolchain2. 隔离挂载的方式&#xff1a;3. QEMU 或其他模拟器来实际运行dockerx86架构实现多平台系统代码的编译&#xff0c;实现方式有多种&#xff1a;交叉编译&#xff1a;toolchain 【新的第三方库不好处理】隔离挂载的方式 【速度慢&…...

华为OD机试题 - 优秀学员统计(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为…...

Nginx学习(7)—— 过滤模块(filter)

文章目录过滤模块简介执行时间和内容执行顺序Nginx是怎么按照次序依次来执行各个过滤模块的呢这些过滤模块的简述&#xff08;按执行顺序&#xff09;模块编译过滤模块分析相关结构体响应头过滤函数响应体过滤函数主要功能介绍发出子请求优化措施过滤模块简介 执行时间和内容 …...

【创作赢红包】

1、IoC\nIoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;是一种软件设计思想&#xff0c;它的核心思想是将对象之间的依赖关系交给容器来管理&#xff0c;从而降低对象之间的耦合度&#xff0c;提高代码的灵活性和可维护性。\n\n在传统的编程模式中&…...

Mybatis入门

1. 框架 框架相当于是一个脚手架&#xff0c;内部已经写好了很多代码&#xff0c;我们只要其基础上进行开发就可以提高我们的开发效率 框架阶段学习&#xff1a; ①先去学习如何使用框架 ②然后再使用熟练的情况下去猜测内部的原理 ③通过源码去验证自己的猜测。 2.Mybat…...

金色传说:SAP-PP-CO01/CO02 生产订单下达保存时报错:用户状态 新建 是活动的 (ORD %00000000001) 消息号BS014

文章目录问题描述一、原因分析&#xff1a;二、解决方案&#xff1a;总结问题描述 某一特殊订单类型的生产订单下达保存时,出现报错提示:用户状态 新建 是活动的 (ORD %00000000001) 报错的消息号为BS014 一、原因分析&#xff1a; 既然是某一特殊订单类型才出现报错,那么问…...

@Transactional和synchronized同时使用时的一些问题以及解决

Transactional和synchronized同时使用并不能保证事务一致性背景任何事情都有一个发生背景有个需求【一个业务里面包含多个事务,而且还需要避免其他线程的影响,所幸的是该服务只需要启动单实例,不然还要考虑分布式的影响】我的思路就是用Transactional 和 synchronized来保证事务…...

贪心-根据身高重建队列

假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组 peopl…...

「解析」牛客网-华为机考企业真题 21-40

又是一年春招时&#xff0c;有幸收到华为自动驾驶算法岗&#xff0c;之前刷题不多&#xff0c;在此汇总下牛客网的真题&#xff0c;主要采用Python编写&#xff0c;个人觉得语言只是实现工具而已&#xff0c;并不是很关键&#xff0c;Python简洁易懂&#xff0c;更加适合算法工…...

JAVA练习92-快乐数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 3月28日练习内容 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目-…...

BPF 之路:技术背景

目录 引言 什么是BPF 历史 组成 执行机制 BPF 和ebpf 的关系 BCC、bpftrace、IO Visor BCC 项目的quick start execsnoop biolatency 动态插桩&#xff1a;kprobes和uprobes 概念 缺点 静态插桩&#xff1a;tracepoint 和USDT 概念 缺点 推荐的方案 初识bpft…...

C++—— set、map、multiset、multimap

目录 关联式容器 概念 键值对 树形关联式容器 set 介绍 定义方式 使用 map 介绍 使用 multiset 介绍 使用 multimap 介绍 使用 相关的OJ题 前K个高频单词 关联式容器 概念 我们之前接触过的一些容器&#xff0c;比如&#xff1a;vector、list、deque、forwa…...

Qlib使用

Qlib https://github.com/microsoft/qlib 将csv文件转化为Qlib的数据格式&#xff1a;https://qlib.readthedocs.io/en/latest/component/data.html#converting-csv-format-into-qlib-format 注意每支股票都要保存成单独一个文档&#xff0c;且文档名字与股票代号一致。 其中f…...

TL-WDR7660 httpProcDataSrv任意代码执行漏洞复现分析

01 漏洞简述 2023年1月31日&#xff0c;CNVD公开了一个由国内安全研究员提交的TL-WDR7660 httpProcDataSrv任意代码执行漏洞&#xff0c;编号为CNVD-2023-05404&#xff0c;同时公开了漏洞利用详情&#xff0c;poc代码链接为https://github.com/fishykz/TP-POC。从poc代码详情…...

基于DDS的SOA测试方案实现

随着以太网技术在车载网络中的应用&#xff0c;各种基于以太网的中间件也相继被应用在车内&#xff0c;如果对车载网络有过相关了解的小伙伴&#xff0c;对于作为中间件之一的DDS&#xff08;数据分发服务Data Distribution Service&#xff09;可能并不陌生&#xff1b;若没有…...

LibTorch中Windows系统环境配置及CUDA不可用问题解决

前言&#xff1a;本文对在Windows系统上进行LibTorch开发环境配置及相关问题解决做一个较为详细的记录&#xff0c;以便后续查询使用。 使用环境版本&#xff1a; Windows 11 Visual Studio 2022 CUDA 12.0 LibTorch 1.13.1_cu11.7 目录一、LibTorch简介二、LibTorch下载安装三…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...