Shell 算法

数组

数组:是一块同类型的连续空间
Shell定义: array=(元素1 元素2 ...)
引用某个元素内容:${数组名[下标]}(下标从0开始)
引用所有元素内容:${数组名[@]}
求出数组元素的个数:${#数组名[@]}

例题

1.打印九九乘法表
方法1:

# !/bin/bash
for ((i=1;i<=9;i++))
do
        for((j=1;j<=i;j++))
        do
        printf "${i}*${j}=`expr ${i} \* ${j}`  "
        done
        printf "\n"
done

方法2:

# !/bin/bash
for i in `seq 1 9`
do
        for j in `seq 1 ${i}`
        do
        printf "${i}*${j}=`expr ${i} \* ${j}`  "
        done
        printf "\n"
done

2.判断该数组是否存在某个元素

# !/bin/bash

array=("a" "b" "c" "d" "e" "f" "g")
read -p "输入要查找的元素" var
for (( i=0;i<${#array[@]};i++))
do
        if test ${var} = ${array[i]}
        then
                echo "${var}元素存在"

                break
        fi
done
if test ${i} -eq ${#array[@]}
then
        echo "元素不存在"
fi


3.同上题(折半查找)
升序:

# !/bin/bash

array=(1 2 3 4 5 6 7 8 9 10 11)
left=0
right=10
mid=0

read -p "输入要查找的元素" key
for((left=0,right=10;left<=right; ))
do
        mid=`expr ${left} + ${right}`
        mid=`expr ${mid} / 2`
        if test ${key} -eq ${array[mid]}
        then
                echo "${key}存在该数组中"
        break
        elif test ${key} -gt ${array[mid]}
        then
                left=`expr ${mid} + 1`
        else
                right=`expr ${mid} - 1`
        fi
done
 if test $left -gt $right
then
        echo "${key}不存在"
fi

降序:

# !/bin/bash

array=(9 8 7 6 5 4 3 2 1)
left=0
right=8
mid=0
read -p "输入要查找的元素" key
for ((left=0,right=8;left<=right; ))
do
        mid=`expr ${left} + ${right}`
        mid=`expr ${mid} / 2`
        if test ${key} -eq ${array[mid]}
        then
                echo "${key}存在该数组中"
        break
        elif test ${key} -gt ${array[mid]}
        then
                right=`expr ${mid} - 1`
        else
                left=`expr ${mid} + 1`
        fi
done
if test ${left} -gt ${right}
then
        echo "${key}不存在"
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值