Я пришел сюда с решением, которое я только что написал, но я определенно не могу найти лучший способ отсортировать мой массив как можно быстрее.Очень быстрый способ сортировки массива целых чисел?
Мне нужен алгоритм, чтобы дать мне ответ менее чем за 1 секунду, на массив, содержащий 100 000 целых чисел.
Вот код:
read N
for ((i=0; i<N; i++)); do
read arr[i]
done
sorted=($(printf '%s\n' "${arr[@]}"|sort -n))
min=$((sorted[1]-sorted[0]))
for ((i=1; i<N-1; i++)); do
diff=$((sorted[i+1] - sorted[i]))
if [ "$diff" -lt "$min" ]; then
min=$diff
fi
done
echo $min
N это количество элементов, в нашем случае 100'000, как я сказал.
Дело в том, после того, как мой массив отсортирован, мне нужно цикл через него и рассчитать минимальное расстояние между двумя целыми числами:
Например, с (3, 5, 8, 9), минимальное расстояние 1 (от 8 до 9).
Я такой новичок в Bash, поэтому я даже не знаю, эффективен ли это;
В самом деле, прирост скорости может исходить от второй части кода, а не из сортировочной части ...
Есть идеи?
Спасибо заранее,
Вы хотите оптимизировать текущий код или хотите получить более быстрый и быстрый код? – ShellFish
Мне не нужно сохранять этот код, поэтому может понадобиться еще один более быстрый код! –
Вторая часть находит минимальное расстояние в линейном времени. Я не думаю, что вы можете добиться более качественной (асимптотической) производительности. – fferri