shell脚本之数值,冒泡排序算法

news2024/12/24 21:12:47

目录

一、数组

1.定义数组

2. 数组中数据类型

2.1数值类型

 2.2字符类型

二、数组的用法

1. 输出数组中的值

2. 统计数组参数个数

​编辑

3.查看数组下标列表

4.分割字符串

 5.替换数组中的字符

 6.删除数组

三、数组追加元素

1.方法1示例

2.方法2示例

3.方法3示例

4.方法4示例 

四、将数组的值传入函数 

1. 如果将数组变量作为函数参数,函数只会取变量的第一个值

2.将输入的数组值转换为原有数组值乘2的新的数组

五、数组排序算法

1.冒泡排序 

1.1基本思想

1.2算法思路

2.实验


 

一、数组

1.定义数组

1)  数组名=(num1 num2 num3 ...)

2)   数组名=([0]=num1 [1]=num2 [3]=num3 ...)

3)   列表名="num1 num2 num3 ..."
     数组名=($列表名)
 
4)  数组名[0]="num1"
     数组名[1]="num2"
     数组名[2]="num3" 
     ...

2. 数组中数据类型

2.1数值类型

#定义一个数组
array=(12 13 14 15)
#输出数组的值
echo ${array[@]}  或  echo ${array[*]}

 2.2字符类型

字符要使用" " 或 ' ' 来定义

#定义一个数组
array1=("zhang san" "li si" "wang wu")
echo ${array1[@]}
#查看数组的参数个数
echo ${#array1[@]}
#完整数组下标顺序为0,1,2,3...  ;输入下标可查看数组中对应下标的值
echo ${array1[下标]}

二、数组的用法

1. 输出数组中的值

#定义一个数组
array=(10 20 30 11 22 33)
#输出数组中的值
echo ${array[@] 或 echo ${array[*]}

2. 统计数组参数个数

#统计数组内参数的个数
echo ${#array[@]}

3.查看数组下标列表

#获取数组下标列表
echo ${!array[@]}
#完整数组下标顺序为0,1,2,3...  ;输入下标可查看数组中对应下标的值
echo ${array1[下标]}

4.分割字符串

#分割数组中字符串
echo ${array[@]:下标数字:参数个数}
#从下标3开始向后取2个参数
echo ${array[@]:3:2}

 5.替换数组中的字符

#临时替换,不对数组进行修改
echo ${array[@]/旧字符/新字符}
#永久替换数组中的字符
array=($(array[@]/旧字符/新字符}

 6.删除数组

#删除数组中某一个参数
unset array[下标]
#删除整个数组
unset array

三、数组追加元素

1)  array[下标]=元素

2)  array[${#array[@]}]=元素
   #只可用于完整数组

3)  array=("${array[@]}" 元素1 元素2 元素3...)
   #双引号不能省略,否则,当数组array中存在包含空格的元素时会按空格将元素拆分多个。
   #不能将“@”替换为“*”,如果替换,不加双引号时与 @ 表现一致,
   #加双引号时,会将数组所有元素作为一个元素添加到数组中

4)  array+=(元素1 元素2 元素3...)
   #代添加元素必须用()包围,并且将元素间用空格分隔

1.方法1示例

2.方法2示例

3.方法3示例

4.方法4示例 

四、将数组的值传入函数 

1. 如果将数组变量作为函数参数,函数只会取变量的第一个值

  

#!/bin/bash


array() {
   echo $1
   echo $@
   echo $#
}


arr=(11 22 33 44)
#将数组变量变成列表
array ${arr[@]}

 

2.将输入的数组值转换为原有数组值乘2的新的数组

#!/bin/bash
#定义函数
array() {
  #将调用函数后的所有参数定义为newarr
   newarr=($@)
  #下标i的范围从0开始,小于参数的个数。下标最大为数组参数个数减1
   for ((i=0;i<${#newarr[@]};i++))
   do
       newarr[$i]=$[${newarr[$i]} * 2]
      #将原有数组的值乘2
   done
#将处理过的值进行输出
 echo ${newarr[@]}
}

###main###

read -p "输入一个数组:" num
#将调用函数后输出的值定义为一个新数组arr
arr=($(array $num))
echo "新数组的值为${arr[@]}"

五、数组排序算法

1.冒泡排序 

类似于气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

1.1基本思想

冒泡排序就是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(将两个元素的位置交换),这样较小的元素就像气泡一样从底部上升到顶部。

1.2算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,轮数为排序的数组长度减1,因为最后一次循环只剩下一个元素,不需要再进行比较。而内部循环主要用于比较数组内每个相邻元素之间的大小,以确定是否交换位置,对比和交换次数随着排序轮数而减少。

2.实验

将冒泡排序封装到函数中,将输入的数组值进行排序,然后输出

#!/bin/bash

MAOPAO() {
      newarr=($@)
    #将数组的长度定义为length
      length=${#newarr[@]}
   #外层循环,控制排序轮数,轮数为数组长度-1   
    for ((i=1;i<length;i++))
    do
       #内层循环,比较相邻两个元素,首轮比较次数=数组长度-1,
       #因为a从0开始,比较次数=数组长度-2;每轮比较后,比较次数比上次少比较一轮。
       for ((a=0;a<length-i;a++))
       do
          #定义相邻两个元素的变量
           first=${newarr[a]}
           second=${newarr[a+1]}
         #比较相邻元素大小
         if [ $first -gt $second ]
         then
            #下标小的元素大的话,就将元素交换位置
             newarr[a]=$second
             newarr[a+1]=$first
         fi
       done
    done
          echo ${newarr[@]}
}


###main###

read -p "输入一个数组:" num
#将调用函数输出的值定义为变量arr
arr=($(MAOPAO $num))
echo "冒泡排序后数组顺序为${arr[@]}"

 

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

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

相关文章

Notion Ai中文指令使用技巧

Notion AI 是一种智能技术&#xff0c;可以自动处理大量数据&#xff0c;并从中提取有用的信息。它能够 智能搜索&#xff1a;通过搜索文本和查询结果进行快速访问 自动归档&#xff1a;可以根据关键字和日期自动将内容归档 内容分类&#xff1a;可以根据内容的标签和内容的…

【嵌入式Linux】MBR分区表 和 GPT分区表

文章目录 GUID以及分区表MBR分区方案GPT 分区方案GPT分区表结构 GPT分区表LBALBA0LBA1LBA 2-33python生成GPT分区表gpt分区表实例 gpt分区表查看查看百问网T113-s3固件查看友善之臂nanopi-m1-plus官方固件查看荣品RV1126固件查看f1c200s固件查看V3s的SD启动卡 原文&#xff1a;…

session和Filter

session 介绍 jsp利用servlet提供的HttpSession接口识别一个用户&#xff0c;存储这个用户的所有访问信息。默认情况下&#xff0c;jsp允许会话跟踪&#xff0c;一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要关掉它&#xff0c;通过将page指令中ses…

多模态:BLIP-2论文讲解

多模态&#xff1a;BLIP-2论文讲解 IntroductionMethod第一阶段第二阶段 实验 Introduction 多模态学习在近两年我们已经见证了他的快速发展&#xff0c;由于它是视觉-语言的交叉领域&#xff0c;我们自然地期待可以借助目前风头正盛的LLM来辅助完成多模态任务。 在这篇论文中…

【SAP Abap】X-DOC:SNRO - ABAP流水号应用

【SAP Abap】X-DOC&#xff1a;SNRO - ABAP流水号应用 1、定义表&#xff08;字段域&#xff09;2、定义流水号3、使用流水号4、测试程序 1、定义表&#xff08;字段域&#xff09; 2、定义流水号 Tcode: SNRO/SNUM&#xff0c; 根据以上创建的字段域 YDSNRO&#xff0c;创建对…

grep练习题

题目: 文件格式&#xff1a; 第1列&#xff1a;城市位置编号。 第2列&#xff1a;月份。 第3列&#xff1a;存储代码及出库年份。 第4列&#xff1a;产品代号。 第5列&#xff1a;产品统一标价。 第6列&#xff1a;标识号。 第7列&#xff1a;合格数量。 file.txt文件内容&a…

RabbitMQ入门案例及简单工程搭建

环境的搭建 这里是用Maven工程搭建的基础环境项目&#xff0c;这里的dome_rabbitmq就是父工程。 子工程 publisher&#xff1a;消息发布者&#xff0c;将消息发送到队列queueconsumer&#xff1a;订阅队列&#xff0c;处理队列中的消息 父工程的pom文件依赖 <?xml ver…

SpringCloud-11_Alibaba Sentinel

SpringCloud系列 SpringCloud-10_Alibaba Nacos SpringCloud-9、SleuthZipkinSpringCloud-8、Gateway网关服务SpringCloud-7_OpenFeign服务调用SpringCloud-6_Ribbon负载均衡SpringCloud-5_模块集群化 求帮助 富文本编辑器用着真伤心TT。。不知道编辑器发生了什么。。--- 用…

Android Studio Notification(状态栏通知) 不显示通知 解决

引言&#xff1a;在学习的过程中&#xff0c;我发现&#xff0c;无论怎么修改&#xff0c;甚至是直接复制了大佬的代码&#xff0c;我的程序都不呢个正确的弹出一个状态栏通知&#xff0c;在经过一晚上的纠缠后&#xff0c;终于找到了原因 通知不显示可能由多种原因引起&#…

C++自动推导与函数模板

自动推导、函数模板、类模板 目录 1. 自动推导出数据类型 2. 函数模板 基本概念注意事项函数模板的具体化函数模板分文件编写函数模板高级函数后置返回类型 1. 自动推导出数据类型 auto关键字 linux 系统下使用的话&#xff0c;要在编译时 —stdc11 注意&#xff1a; a…

关于B+树的介绍、用途和c++代码实现

数据结构和算法的重要性不言而喻&#xff0c;一些优秀的开源项目的核心和灵魂就是数据结构、算法。在实际的编程中我们经常可以在各种框架、算法中看见B树、B树的身影。特别是在数据库的数据库引擎中&#xff0c;它们更是占据着重要的地位。 下面我将通过简单的二叉树&#xff…

2023/5/12总结

这俩天主要花时间在项目上&#xff1a; 实现了创建群聊和添加群聊&#xff1a; 点击创建群聊&#xff1a; &#xff0c;点击确定之后&#xff0c;会分配到一个群聊&#xff0c;默认头像会是下面这个圆形的头像&#xff1a; 添加群聊&#xff1a; 如果你要加入的群聊在自己的列…

06-HTML-列表标签

1、 <ul> 标签定义无序列表。 2、<ol> 标签定义有序列表。 属性值描述compactcompact HTML5 中不支持。HTML 4.01 中不赞成使用。 规定列表呈现的效果比正常情况更小巧。 reversedreversed规定列表顺序为降序。(9,8,7...)startnumber规定有序列表的起始值。type 1A…

为什么使用ConcurrentHashMap

currentHashMap的介绍 ConcurrentHashMap是线程安全并且高效的一种容器,我们就需要研究一下ConcurrentHashMap为什么既能够保证线程安全,又可以保证高效的操作。 为什么使用ConcurrentHashMap,我们就需要和HashMap以及HashTable进行比较&#xff1f; HashMap是线程不安全的&…

唐朔飞计组 第六章运算方法简单复习

在计算机中参与运算的数有两类&#xff1a;有符号数和无符号数 int 和unsigned unsigned可以看成是正数或者绝对值。 有符号数分为原码反码和补码 原码和反码的表示范围是相同的 但是补码由于将-0的位置换成2^n所以补码表示范围比原码和反码要多一位&#xff0c; 判断溢出比较…

诚邀社区开发者参与DeepBook测试和集成

DeepBook是Sui的基础流动性层&#xff0c;Sui基金会诚挚邀请社区开发者参与其测试和集成。 DeepBook为Sui的原生中央订单簿&#xff08;Central Limit Order Book&#xff0c;CLOB&#xff09;和基础流动性层&#xff0c;将会在未来数周准备完成&#xff0c;我们邀请大家参与测…

Unity大面积草地渲染——4、对大面积草地进行区域剔除和显示等级设置

目录 1、Shader控制一棵草的渲染 2、草地的动态交互 3、使用GPUInstancing渲染大面积的草 4、对大面积草地进行区域剔除和显示等级设置 Unity使用GPU Instancing制作大面积草地效果 大家好&#xff0c;我是阿赵。 这里开始讲大面积草地渲染的第四个部分&#xff0c;对大面积草地…

零知识证明:安全定义

之前在本科的课程仅仅略微介绍了下零知识证明&#xff0c;之后自学了一些相关内容&#xff0c;但不成体系。本学期跟着邓老师较为系统地学习了 ZKP&#xff0c;发现自己之前有很多的误解&#xff0c;临近期末整理下重要内容。 参考文献&#xff1a; Goldreich O. Foundations…

C语言实现个人通讯录(功能优化)

实战项目---通讯录&#xff08;功能优化&#xff09; 1.基本思路介绍&#xff1a;1.1基本思路&#xff1a; 2.通讯录的具体实现&#xff1a;2.1 通讯录的建立&#xff1a;2.2通讯录功能&#xff1a; 3.具体功能函数的实现&#xff1a;3.1 增添联系人&#xff1a;3.2 删除联系人…

从零开始学习JVM--初识Java虚拟机

1 虚拟机与Java虚拟机 1.1 基本介绍 所谓虚拟机&#xff08;Virtual Machine&#xff09;。就是一台虚拟的计算机。它是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。 系统虚拟机&#xff1a;完全对物理计算…