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

news2024/11/18 5:59:45

目录

一、数组

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/517515.html

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

相关文章

SpringCloud Alibaba详解

目录 微服务架构概念 服务治理 服务调用 服务网关 服务容错 链路追踪 SpringcloudAlibaba组件 Nacos 负载均衡 Ribbon Fegin Sentinel 高并发测试 容错方案 Sentinel入门 Feign整合Sentinel 微服务架构概念 服务治理 服务治理就是进行服务的自动化管理&#xf…

MYSQL的主键和外键,内连接和外连接,关联子查询

目录 友情提醒第一章&#xff1a;MYSQL数据库多表主键和外键1&#xff09;外键介绍&#xff08;FOREIGN KEY&#xff09;2&#xff09;外键约束作用2&#xff09;三种情况下添加外键约束①一对一关系②一对多关系多对多关系 4&#xff09;删除外键约束 第二章&#xff1a;MYSQL…

scitb5函数1.4版本(交互效应函数P for interaction)发布----用于一键生成交互效应表

在SCI文章中&#xff0c;交互效应表格&#xff08;通常是表五&#xff09;能为文章锦上添花&#xff0c;增加文章的信服力&#xff0c;增加结果的可信程度&#xff0c;还能进行数据挖掘。 交互效应表我在既往文章《R语言手把手教你制作一个交互效应表》已经介绍怎么制作了&…

提效新纪元-组件化开发在转转App中的应用-后端篇

1 前言 组件化开发是一种利用可重用的软件构件来设计和开发计算机系统的过程。借助组件化开发可以实现最小化、高效交付。 平台基础体验部将业务逻辑抽象为组件&#xff0c;通过组合组件快速构建商品Feed流&#xff0c;研发效率整体提升2倍。组件化开发不仅带来效率的提升&am…

【AI大模型智慧办公】教你用讯飞星火大模型5分钟写一个转正述职ppt

文章目录 前言SparkDesk讯飞星火认知大模型简介利用讯飞星火写一个转正述职ppt1.告诉讯飞星火我想写一篇转正述职ppt2.利用MindShow一键生成ppt 申请体验写在最后 前言 随着ChatGPT迅速走红,国内各大企业纷纷发力认知大模型领域。经过一段时间的酝酿,讯飞“星火认知大模型”于…

解决matplotlib画图去除非常多的白色边框

文章目录 解决matplotlib画图去除非常多的白色边框本文说明为什么matplotlib画图会默认有很多白色边框&#xff1f;绘图默认绘图去除白边方法一&#xff0c;修改保存图像的代码取消白边略微增加白边 去除白边方法二&#xff0c;修改显示图像的代码 总结 解决matplotlib画图去除…

Maven构建生命周期

目录 Default (Build) 生命周期 命令行调用 Site 生命周期 如何清除本地 Maven 仓库并重新构建项目 Maven 构建配置文件 mvn dependency:purge-local-repository 这个命令是干什么的&#xff1f; mvn clean install这个命令是干什么的&#xff1f; 配置文件激活 1、配…

自从外包三年半,程序员人废了一半

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟。大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了3年多的CRUD&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企…

HBase入门 修改表字段类型(十一)

一、查询看 自己表的DATA_TYPE select TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY,DATA_TYPE,TYPE_NAME,COLUMN_SIZE,DECIMAL_DIGITS from system.catalog where TABLE_NAME表名2、修改为varchar类型 upsert into SYSTEM.CATALOG (TENANT_ID,TABLE_SCHEM,TA…

如何高清视频录制?您只需要这样操作!

案例&#xff1a;如何录制画质高清的视频&#xff1f; 【我录制了一个视频课程&#xff0c;上传到网上&#xff0c;但是我录制的视频画质不好&#xff0c;影响观感。有没有支持高清录制的录屏工具&#xff1f;有没有小伙伴可以推荐一下&#xff01;在线等&#xff01;】 无论…

ChatGpt与AI交谈的未来到来,你准备好了吗?

ChatGpt已经成为了人工智能领域中的一颗明珠&#xff0c;它可以根据用户提出的问题进行分析和回答&#xff0c;帮助用户解决问题和获取信息。而未来&#xff0c;随着人工智能技术的进一步发展&#xff0c;ChatGpt与AI交谈将成为一种更加普遍和重要的交流方式。你准备好了吗&…

7 文件操作、单元测试、goroutine【Go语言教程】

7 文件操作、单元测试、goroutine【Go语言教程】 1 文件操作 1.1 介绍 os.File 封装所有文件相关操作&#xff0c;File 是一个结构体 常用方法&#xff1a; 打开文件 关闭文件 package mainimport ("fmt""os" )func main(){//打开文件//file又叫做&…

VPGTrans: 10%的成本定制你自己的类GPT-4多模态大模型

作者 | 张傲 最近的多模态&#xff08;对话&#xff09;大模型将基于文本的ChatGPT的强大能力扩展到了多模态输入&#xff0c;实现强大的多模态语义理解&#xff0c;比如GPT-4、BLIP-2、Flamingo等。但咱们普通玩家训练一个多模态GPT代价非常昂贵。来自于新加坡国立大学和清华大…

基于SSM框架的核酸检测管理系统

基于SSM框架的核酸检测管理系统 快速查看 基于SSM框架的核酸检测管理系统功能需求开发工具模块相关技术系统相关图片 功能需求 用户模块&#xff1a; 注册功能&#xff1a;普通用户可以访问本系统进行账户注册&#xff0c;个人资料&#xff1a;登录系统对自己的个人资料&…

Parker派克伺服电机有哪些优势特点?如何选型?

一、什么是伺服电机&#xff1f; 伺服电机是一种可以通过控制器精确地控制位置、速度和加速度的电机&#xff0c;主要由电机、编码器和控制器三部分组成&#xff0c;具有高转矩、高精度、快速响应和低转速稳定特性&#xff0c;能够在负载扰动、电压变化及机械特性变化下保持较…

springboot整合邮箱功能二(普通邮件, html邮件, thymleaf邮件)

【SpringBoot整合Email发送邮件】_ζั͡ ั͡空 ั͡ ั͡白&#xfffd;的博客-CSDN博客 https://www.cnblogs.com/erlou96/p/16878192.html#_label1_5 1. 准备工作 1.1 qq邮箱设置 本文默认使用qq邮箱来发送邮件,然后使用一个在线临时邮箱来接收邮件。为了让程序能够通过…

srs one2one,one2many通话环境搭建

一、简介 二、go环境配置 三、srs编译配置 四、信令服务器编译 4.1 signaling8 4.2 web服务器 五、测试 六、附录 官⽅⽂档参考地址&#xff1a;https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#sfu-one-to-one 一、简介 srs的webrtc能力和两个信令服务器不管是逻辑上还是代码…

Linux 进程基础

目录 1、进程的概念 2、进程与线程的区别、进程与程序的区别 2.1 进程与线程的区别 2.2 进程与程序的区别 3、进程相关 shell 命令 3.1 ps 3.3.1 参数说明 3.3.2 结果说明 3.2 pidof 3.3 pstree 3.4 top 3.5 kill 4、进程相关函数 4.1 fork 4.1.1 fork的函数原型…

医院内导航及智能导医,医院导诊图怎么制作?

在大型综合性医院&#xff0c;由于专业分工精细&#xff0c;一个诊疗过程涉及的功能单元往往分布在不同的楼宇、不同楼层的不同位置&#xff0c;再加上多数患者对医院环境不熟悉&#xff0c;导致滞院的时间长、诊疗效率低、患者对服务的满意度下降。为解决这一问题&#xff0c;…

VMware Aria Operations for Logs 8.12 - 集中式日志管理

VMware Aria Operations for Logs 8.12 - 集中式日志管理 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-operations-for-logs/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 集中式日志管理 VMware Aria …