gpt4 book ai didi

arrays - 如何在 bash shell linux 中交换数组元素?

转载 作者:太空狗 更新时间:2023-10-29 11:12:11 24 4
gpt4 key购买 nike

我对如何交换数组中元素值的语法有疑问。

array="5 3 2 1 4"
echo "${array[*]}"

changed=1
while [ $changed != 0 ]
do
changed=0
for (( i=0 ; i<=${#array[@]}-1 ; i++ ))
do
if [ ${array[$i]} -gt ${array[$i+1]} ]
then
tmp=${array[$i]}
array[$i]=${array[$i+1]}
array[$i+1]=$tmp
changed=1
fi
done
done

echo "Sorted array: "
echo "${array[*]}"

编辑:

感谢您回答我的问题。我更改了代码,现在看起来像这样。

但不幸的是还有一个问题。

它说:

jdoodle.sh: line 3: $'\r': command not found
jdoodle.sh: line 8: syntax error near unexpected token `$'\r''
jdoodle.sh: line 8: ` for ((i=0;i<=${#array[@]}-1;i++))

最佳答案

这是冒泡排序的一种实现方式:

#!/bin/bash
array=(5 3 2 1 4)
echo "${array[*]}"

size=${#array[@]}

for (( i=0; i<size-1; i++ )); do

for (( j=0; j<size-i-1; j++ )); do
if (( array[j] > array[j+1] )); then
tmp=${array[j]}
array[j]=${array[j+1]}
array[j+1]=$tmp
fi
done

done

echo "Sorted array:"
echo "${array[*]}"

您的代码的主要问题是它实际上使用数组。

定义数组,如 array=(value1 value2 value3)。最好使用 [[ ]] 代替 [ ] 进行测试。如果我们稍微更改您的代码以创建一个有效的冒泡排序算法,它可能看起来像这样:

#!/bin/bash
array=(5 3 2 1 4)
echo "${array[*]}"

changed=1 j=0

while [[ $changed != 0 ]]
do
((j++))
changed=0
for (( i=0; i<${#array[@]}-j; i++ ))
do
if [[ ${array[i]} -gt ${array[i+1]} ]]
then
tmp=${array[i]}
array[i]=${array[i+1]}
array[i+1]=$tmp
changed=1
fi
done
done

echo "Sorted array:"
echo "${array[*]}"

关于arrays - 如何在 bash shell linux 中交换数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47739277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com