我来提供一种解决方案,但我肯定找不到比这更快速地对数组进行排序的方法。
实际上,我需要算法在包含10万个整数的数组中在不到1秒的时间内给出答案。
以下是代码:
N是元素的数量,本例中为10万。 问题是,在我的数组排序后,我需要遍历它并计算两个整数之间的最小距离: 例如,对于(3,5,8,9),最小距离为1(在8和9之间)。 由于我是Bash的新手,因此甚至不知道这是否是一种有效的方法; 实际上,速度的提高可能来自代码的第二部分,而不是排序的一部分...... 有什么建议吗? 先行致谢,
实际上,我需要算法在包含10万个整数的数组中在不到1秒的时间内给出答案。
以下是代码:
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是元素的数量,本例中为10万。 问题是,在我的数组排序后,我需要遍历它并计算两个整数之间的最小距离: 例如,对于(3,5,8,9),最小距离为1(在8和9之间)。 由于我是Bash的新手,因此甚至不知道这是否是一种有效的方法; 实际上,速度的提高可能来自代码的第二部分,而不是排序的一部分...... 有什么建议吗? 先行致谢,