fortran简单排序算法,对一维、二维矩阵进行正序或倒序排序

fortran简单排序算法,对一维、二维矩阵进行正序或倒序排序

  • 0. 引言
  • 1. 算法实现
    • 1.1 一维数组排序
    • 1.2 二维数组排序
    • 1.2 module文件
  • 2. 结语


0. 引言

   排序算法是计算机科学中的一项重要技术,它将一组数据按照特定的顺序排列起来。排序算法有很多种,如冒泡排序、选择排序、插入排序、快速排序等。排序算法在数据处理和计算机科学中具有重要的意义,它能够帮助我们进行数据的组织和检索,分析和统计,去重和筛选,高程序的效率,推动算法理论研究和算法工程的开发。

   本篇基于Fortran内置minlocmaxlox一维、二维矩阵进行可控的正序和倒序排列。

1. 算法实现

1.1 一维数组排序

   示例1 生成一个随机一维向量,调用module文件下的sort_simple函数进行正序和倒序排列,sort_simple函数的一般形式为:

function sort_simple(array, bool)result(array2)

其中array为待排序的一维向量;bool可选参数,默认正序排列,设置为True时倒序排列;array2为返回排序后的结果,size和array的size一致。

! Main文件 简单一维排序
program mainuse, intrinsic ::  iso_fortran_envuse base_math!> 三种排序比较 调用简单排序real(real64),allocatable :: array(:),array2(:),array3(:)integer :: ireal(real64) :: t_beg,t_end,t_samplereal(real64),allocatable,dimension(:) :: arrallocate( array(12) ) ! 假定数组长度为12call random_seedcall random_number(array) ! 生成随机数组call cpu_time(t_beg)array2 = sort_simple(array) array3 = sort_simple(array, .true.)call cpu_time(t_end)t_sample = t_end - t_beg ! 记录用时do i = 1, size(array2)write(*, '(f12.7,1X,f12.7,1X,f12.7)')array2(i),array3(i)enddo
end program

   执行结果如下,能够看到array2array3分别输入了正序排列倒序排列的结果,数据量少时可以适用,数据量多的时候该方法比较耗时,后续会有其他方法分享。


1.2 二维数组排序

   示例2 生成一个随机二维向量,调用module文件下sort_simple_dim2函数进行正序和倒序排列,sort_simple_dim2函数的一般形式为:

function sort_simple_dim2( array, dim, bool)result(array2)

   其中array为输入要排序的二维矩阵,dim控制对行或列进行排序,1为行,2为列;bool可选参数,默认正序排列,设置为True时倒序排列。

! Main文件 简单二维排序
program mainuse, intrinsic ::  iso_fortran_envuse base_mathreal(real64),allocatable :: array(:,:),array2(:,:),array3(:,:)integer(int32) :: i,jallocate(array(4,4))call random_seedcall random_number(array) ! 生成随机数组array2 = sort_simple_dim2( array, 1)array3 = sort_simple_dim2( array, 1,.true.)print *,"二维数组array倒序排列(排序前):"do i = 1, size(array3,1)write(*, '( *(f12.7,1X) )')(array3(i,j),j=1,size(array3,2))enddoprint *,"二维数组array正序排列(排序后):"do i = 1, size(array2,1)write(*, '( *(f12.7,1X) )')(array2(i,j),j=1,size(array2,2))enddoend 

1.2 module文件

   module文件 中内容如下,包含了两个用于排序的函数体:

! module文件
module base_math
use, intrinsic ::  iso_fortran_env
implicit nonecontains    !** 排序(一维简单排序)     
function sort_simple(array, bool)result(array2)
implicit none
real(real64)  ::   array(:)
logical,optional :: bool
integer(int32) :: count,i,cont
integer(int32) :: index(1)
real(real64)    ,allocatable  :: array2(:),array3(:)
logical :: bool2
real(real64) :: num1,num2
real(real64),parameter :: hg = huge (0.d0)
real(real64),parameter :: eps = epsilon(0.d0)bool2 = .false.
if(present(bool))bool2 = bool ! 控制倒序还是正序(默认是正序)count = size(array)
if(count == 1)return
array3 = array
allocate(array2, source = array)
cont = 0
docont = cont + 1if(.not. bool2)thenindex = minloc(array3)array2(cont) = array3(index(1))array3(index) = hgelseindex = maxloc(array3)array2(cont) = array3(index(1))array3(index) = epsendifif(cont == count)exit
enddoend function! 二维矩阵按行排序/按列排序(将每一行或列按一定的次序排列)
function sort_simple_dim2( array, dim, bool)result(array2)
real(real64),allocatable,intent(in) :: array(:,:)
integer(int32),intent(in) :: dim
logical,optional :: bool
real(real64),allocatable :: array2(:,:)
real(real64),allocatable :: array3(:,:)
integer(int32) :: i
logical :: bool2if( .not.allocated(array) )return
if(size(array,1) == 1 .and. size(array,2) == 1)returnbool2 = .false.
if(present(bool))bool2 = bool ! 控制倒序还是正序(默认是正序)
array3 = arrayallocate(array2,source = array)
if(dim == 1)then ! 逐行排序do i = 1, size(array,1)array2(i,:) = sort_simple(array(i,:), bool2)enddoelseif(dim == 2)then ! 逐列进行排序do i = 1, size(array,2)array2(:,i) = sort_simple(array(:,i), bool2)enddo    
endifend functionend module base_math

2. 结语

   本篇分享了基于fortran简单排序的方法,能够实现对一维、二维矩阵的正序或倒序排列。






😜
😜😜
😜😜😜😜

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念,涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js(一种流行的 3D 渲染 JavaScript 库)中,了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

2、ASPX、.NAT(环境/框架)安全

ASPX、.NAT&#xff08;环境/框架&#xff09;安全 源自小迪安全b站公开课 1、搭建组合&#xff1a; WindowsIISaspxsqlserver .NAT基于windows C开发的框架/环境 对抗Java xx.dll <> xx.jar 关键源码封装在dll文件内。 2、.NAT配置调试-信息泄露 功能点&#xf…

《Linux系统编程篇》Visual Studio Code配置下载,中文配置,连接远程ssh ——基础篇

引言 vscode绝对值得推荐&#xff0c;非常好用&#xff0c;如果你能体会其中的奥妙的话。 工欲善其事&#xff0c;必先利其器 ——孔子 文章目录 引言下载VS Code配置VS Code中文扩展连接服务器 连接服务器测试确定服务器的IP地址VS code 配置ssh信息选择连接到主机选择这个添…

【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(下)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 ✔️ 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事…

go-高效处理应用程序数据

一、背景 大型的应用程序为了后期的排障、运营等&#xff0c;会将一些请求、日志、性能指标等数据保存到存储系统中。为了满足这些需求&#xff0c;我们需要进行数据采集&#xff0c;将数据高效的传输到存储系统 二、问题 采集服务仅仅针对某个需求开发&#xff0c;需要修改…

Profibus协议转Profinet协议网关模块连接智能电表通讯案例

一、背景 在工业自动化领域&#xff0c;Profibus协议和Profinet协议是两种常见的工业通讯协议&#xff0c;而连接智能电表需要用到这两种协议之间的网关模块。本文将通过一个实际案例&#xff0c;详细介绍如何使用Profibus转Profinet模块&#xff08;XD-PNPBM20&#xff09;实…

Kubernetes 为pod指定DNS

在k8s里面&#xff0c;默认创建pod会给pod默认分配一个默认的dns&#xff0c;这个dns是哪来的呢&#xff1f;可不可以改成其他的dns呢&#xff1f; 先进入到pod里面来&#xff0c;可以看到这里面默认设置的DNS服务器&#xff0c;这个服务器地址为10.96.0.10。这个地址是k8s自动…

[web]-图片上传、文件包含-图片上传

题目内容提示&#xff1a;上传图片试试吧&#xff0c;注意统一时区问题 打开页面如图&#xff0c;源码没有过滤&#xff0c;随便输入&#xff0c;进入上传目录 根据链接可以看到是文件包含&#xff0c;可以利用编码读取源码&#xff0c;这里只列出有用页面的编码&#xff08;?…

一文入门【NestJs】Providers

Nest学习系列 ✈️一文入门【NestJS】 ✈️一文入门【NestJs】Controllers 控制器 &#x1f6a9; 前言 在NestJS的世界里&#xff0c;理解“Providers”是构建健壮、可维护的后端服务的关键。NestJS&#xff0c;作为Node.js的一个现代框架&#xff0c;采用了Angular的一些核…

科普文:微服务技术栈梳理

概叙 如上两图所示&#xff0c;微服务架构下&#xff0c;需要的组件很多&#xff0c;上面中也并未列全。下面将梳理一下国内微服务架构下&#xff0c;用到的技术栈&#xff0c;仅供参考。 科普文&#xff1a;12种常见的软件架构-CSDN博客 没有最好的架构&#xff0c;只有最适…

基于springboot+vue+uniapp的机电公司管理信息系统

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

【C++】 List 基本使用

C List 基本使用 基本概念 list 是一个序列容器&#xff0c;它内部维护了一个双向链表结构。与 vector 或 deque 等基于数组的容器不同&#xff0c;list 在插入和删除元素时不需要移动大量数据&#xff0c;因此在这些操作上具有较高的效率。然而&#xff0c;访问列表中的特定…

MAC通过SSH连接VirtualBox中的虚拟机

1、虚拟机网络连接方式使用桥接方式-桥接网卡 2、重启虚拟机&#xff0c;查看虚拟机ip地址是否跟Mac宿主机在同一网段 3、SSH工具&#xff08;推荐Tabby&#xff09;输入IP、用户名和密码就能连接虚拟机了

通过Bugly上报的日志查找崩溃闪退原因

第一步&#xff0c;解析堆栈信息 在bugly上收集到的信息是这样的 0x000000010542e46c 0x0000000104db4000 6792300 OS应用发生崩溃时&#xff0c;系统会生成一份崩溃日志&#xff0c;这份日志中包含了崩溃时的堆栈信息&#xff0c;但这些堆栈信息并非直接指向源代码&#x…

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)

最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会&#xff0c;口头汇报或海报展示(可获得相应证明证书) ————————————————————————————————————————— [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVI…

ArduPilot开源飞控之AP_Mount_Topotek

ArduPilot开源飞控之AP_Mount_Topotek 1. 源由2. 框架设计3. 重要函数3.1 动态过程3.1.1 AP_Mount_Topotek::update3.1.2 AP_Mount_Backend::calculate_poi 3.2 基础能力3.2.1 AP_Mount_Topotek::healthy3.2.2 AP_Mount_Topotek::has_pan_control 3.3 设备功能3.3.1 AP_Mount_T…

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问&#xff08;以 apollo 为例&#xff09;2.2.1、文件…

Vue1-Vue核心

目录 Vue简介 官网 介绍与描述 Vue的特点 与其它 JS 框架的关联 Vue周边库 初识Vue Vue模板语法 数据绑定 el与data的两种写法 MVVM模型 数据代理 回顾Object.defineProperty方法 何为数据代理 Vue中的数据代理 数据代理图示 事件处理 事件的基本使用 事件修…

[Python学习篇] Python包管理工具pip

目录 什么是pip pip主要功能 配置pip 安装pip 升级pip 卸载pip 查看pip是否安装成功 pip帮助信息 设置国内镜像源 使用pip 安装包 安装一个包 安装指定版本的包 安装大于或小于某个版本的包 requirements.txt文件的使用 管理当前环境中的包及其版本 批量安装包…

【java】力扣 合并k个升序链表

文章目录 题目链接题目描述思路代码 题目链接 23.合并k个升序链表 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表 思路 我在这个题里面用到了PriorityQueue(优先队列) 的知识 Prio…