Распечатать элемент из отсортированного массива - PullRequest
0 голосов
/ 07 мая 2020

Я написал программу для сортировки массива и печати элемента, в котором совпадают несортированный массив и отсортированный массив. Теоретически это должно работать, но это не так. Все элементы отсортированного массива почему-то объединяют все это и выводят элемент массива 1.

#!/bin/bash

arr=(6 2 15 90 9 1 4 30 1 3)

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

arr_sort=($(sort ${arr[@]}))

for ((j=0; j<(( ${#arr[@]} -1 )); j++)); do
     for ((k=0; k<(( ${#arr[@]} -1 )); k++)); do
     if (( ${arr[j]:-0} == ${arr_sort[k]:-0} )); then
          echo ${arr[j]}
          break
     fi
done

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте следующее:

#!/bin/bash

arr=(6 2 15 90 9 1 4 30 1 3)
arr_sort=( $(echo ${arr[@]} | tr ' ' '\n' | sort -n) )

for ((j=0; j<${#arr[@]}; j++)); do
     if (( ${arr[i]} == ${arr_sort[i]} )); then
       echo "Match ${arr[j]} at position $j (starting from 0)"
     fi
done

Поскольку нет совпадений между несортированным массивом

 6  2 15 90  9  1  4 30  1  3

и отсортированным

 1  1  2  3  4  6  9 15 30 90

в примере, который вы дал, выхода не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...