簡體   English   中英

在 bash 中相應地對兩個數組進行排序

[英]sort two arrays accordingly in bash

我有兩個全局數組: XFx

我正在對X數組進行排序,並嘗試將 fx 數組中的相應值隨着 X 移動而移動。 所有這些都是冒泡排序。

在 fx 數組中沒有任何反應。

對於以下示例:

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

出將是

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[@]}
}

如果數組是全局的

這是正確的方法

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM