2014-03-01 3 views
2

bash에서 정수 배열에서 최대 값을 찾으려고합니다. 나는 bash에 꽤 새로운 사람이다. 배열이 약 500 양의 정수의 예입니다 여기에 은 ...배열 값을 최대로 비교하는 Bash

max="${array[0]}" 
    for ((i=0;i<${#array[@]};i++)) 
    do 
     if [ ${array[$i]} > $max ] 
     then 
      max="${array[$i]}" 

     fi 
    done 

내가 지금까지있는 것입니다. 24 27 13 34 2 104 645 411 1042 38 5 24 120 236 2 33 6. 현재 그것은 항상 내 배열의 마지막 정수를 반환합니다. 쉬운 수정이되어야하는 것 같지만, 내가 무엇을 놓치고 있는지 확실하지 않습니다. 어떤 도움을 주셔서 감사합니다.

[[ ${array[$i]} -gt $max ]] # numeric comparison operator 
((${array[$i]} > $max))  # arithmetic evaluation 

또는 아마에도 불구하고 빨라집니다 표준 도구를 사용

답변

5

[ ${array[$i]} > $max ]어휘 비교를 수행하는이 테스트, 그래서 99이 대신 중 하나를 원하는 이상 100

입니다 몇 가지 추가 프로세스를 생성해야합니다.

max=$(printf "%d\n" "${array[@]}" | sort -n | tail -1) 
+0

정렬은 루프가있는 최대 값을 찾기 위해 O (n)와 비교하여 O (ng n) 연산이므로 max를 찾는 데있어 과잉입니다. 하지만 목록의 크기에 따라 차이가 나지 않거나 그 차이가 걱정할 필요가 없습니다. – chepner

1

인덱스를 반복하는 것이 아니라, 항목 자체를 반복합니다. 실제 문제에 더 구체적으로, 문자열 비교가 아닌 산술 비교를하고 있는지 확인하십시오.

max="${array[0]}" 
for i in "${array[@]}"; do 
    ((i > $max)) && max=$i 
done