显示已排序的数组

显示已排序的数组

如何创建一个接受数组参数并返回排序数组的函数(“sortarr”)?

Shell 脚本

echo "Original Numbers in array:"
for (( i = 0; i <= 4; i++ ))
do
  echo ${nos[$i]}
done

答案1

你不需要。你可以使用sort

$ echo ${array[@]}
1 8 14 -4 123 12

$ printf '%s\n' "${array[@]}" | sort -n
-4
1
8
12
14
123

并使其成为一个函数:

mysort(){
    printf '%s\n' "$@" | sort -n
}
array=(1 8 14 -4 123 12)
mysort "${array[@]}"

如果你真的非常想,你可以尝试在 bash 中实现排序算法。不过,也许更简单的方法是用头撞墙几次。你真的不想用 shell 语言写这种东西。不过,如果你坚持的话,你可以使用类似这样的代码(在 bash 中重新实现的一个示例这里):

mysort(){
    for((i=${#array[@]}-1;i>=0; i--)); do
        for((j=1;j<=$i; j++)); do
            if [[ ${array[j-1]} -gt ${array[j]} ]]; then
                temp="${array[j-1]}"
                array[j-1]="${array[j]}"
                array[j]="$temp"
            fi
        done
    done
}
declare -a array=(1 8 14 -4 123 12)
mysort $array
printf '%s\n' "${array[@]}"

不过说真的,不要,我再说一遍,不要尝试在 shell 中执行任何严肃的计算任务。有更好的工具可以做到这一点。例如,任何还算不错的脚本语言都已经具有允许您排序的方法。例如:

  • Perl

    $ perl -le '@array=(1,8,14,-4,123,12); print join " ", sort @array'
    -4 1 12 123 14 8
    
  • Python

    $ python -c 'array = [1,8,14,-4,123,12]; array.sort(); print(array)'
    [-4, 1, 8, 12, 14, 123]
    

答案2

仅功能

    Sort(){for item in $@; do echo $item; done | sort}

带有列表制作、功能和显示的代码:

list=( Item3 Item1 Item2 )

Sort()
  {
    for item in $@; 
      do 
        echo $item; 
      done | 
    sort
   }


sorted_list=$(Sort ${list[@]})

echo ${sorted_list[@]}

快速浏览:
1.列出清单。
列表=()
2.创建排序函数。
种类(){}
3. 函数的第一行代码遍历列表并将条目分配给名为 item 的变量。
对于 $@ 中的变量;
3. 将每个列表项传递给 echo 命令。
执行回显 $item;
4. 完成后,echo 命令输出将通过管道传输到 sort 命令。
完成 |
5. 这就是创建的函数。之后为排序列表创建一个变量。
排序列表=
6. 用函数的输出填充变量。
sorted_list=$()
7.调用函数
sorted_list=$(排序())
8.将列表传递给函数。
sorted_list=$(排序${list[@]})
8.显示排序列表
回显 ${sorted_list[@]}

相关内容