在bash中相应地排序两个数组

时间:2014-11-18 14:40:15

标签: arrays bash sorting

我有两个全局数组:XFx

我正在对X数组进行排序,并尝试在X移位时移动fx数组中的相应值。通过冒泡排序所有这些。

在fx数组中没有任何事情发生。

以下示例:

x-( 3 2 1) fX-(1 2 3) 

Out将是

x-(1 2 3 ) fx-(3 2 1)

这是我的代码:

function extractLoopPoints
{
bubble_sort
echo " inputX: ${xArray[@]}"
echo " inputX: ${fxArray[@]}"
echo "output: $(bubble_sort ${xArray[@]})"
echo "output fx: $(bubble_sort ${fxArray[@]})"
} 


function bubble_sort()
{  

    local xArray=($@)  local fxArray=($@) max=$(($# - 1))
    while ((max > 0))
    do
        local i=0
        while ((i < max))
        do
            if [ ${xArray[$i]} \> ${xArray[$((i + 1))]} ]
            then
                local t=${xArray[$i]}
                local tf=${fxArray[$i]}
                xArray[$i]=${xArray[$((i + 1))]}
                fxArray[$i]=${fxArray[$((i + 1))]}
                xArray[$((i + 1))]=$t 
                fxArray[$((i + 1))]=$tf
            fi
            ((i += 1))
        done
        ((max -= 1))
    done
    echo ${xArray[@]}
    echo ${fxArray[@]}
}

1 个答案:

答案 0 :(得分:1)

如果数组是全局的

她是正确的方式

function bubble_sort()
{   
    local max=${#xArray[@]}
    size=${#xArray[@]}
    while ((max > 0))
    do
        local i=0
        while ((i < max))
        do
            if [ "$i" != "$(($size-1))" ] #array will not be out of bound
            then
                if [ ${xArray[$i]} \> ${xArray[$((i + 1))]} ]
                   then
                   local t=${xArray[$i]}
                   xArray[$i]=${xArray[$((i + 1))]}
                   xArray[$((i + 1))]=$t

                   local tf=${fxArray[$i]}
                   fxArray[$i]=${fxArray[$((i + 1))]}
                  fxArray[$((i + 1))]=$tf
                 fi
             fi
            ((i += 1))
        done
        ((max -= 1))
    done
}