【发布时间】:2019-05-29 01:00:37
【问题描述】:
所以我在 Carrer 的第一年,我被困在一个作业中,我们需要读取一个数组,然后将它从低到高排序,所以我的方法是创建另一个数组和星号给它第一个数组的最小值并继续。 小我我做到了,我编写了一个代码,以便我可以读取数组的值并将最小值分配给一个名为 minimo 的单独值。 但是我被困在那里,我可以将最低值分配给我的新排序数组的第一个值,但是当再次检查最低值时,它当然会告诉我相同的数字,所以我想也许在给我之后最低值我可以从原始数组中删除它并再次检查最低值,但我真的不知道从哪里开始,或者即使这是最佳方法,甚至是可能的方法。 这是代码。
PROGRAM hello
IMPLICIT NONE
integer, dimension(1000) :: vector, v_ascendente, v_descendente
integer :: v_size, i, j, minimo = 1000000
print*, "Cuantos numeros introducira"
read*, v_size
print*, "Introduzca los", v_size, "numeros del vector separandolos por ENTER"
do i=1, v_size
read*, vector(i)
end do
do j=1, v_size
do i=1, v_size
minimo = min(minimo, vector(i))
end do
print*, "minimo = ", minimo
v_ascendente(j) = minimo
end do
END PROGRAM
你们对另一种方法有什么想法吗? 提前致谢。
【问题讨论】:
-
我投票结束这个过于宽泛:有很多众所周知的排序算法,我们无法在这里介绍。如果您正在尝试实现特定的一个并且卡住了,那么请在那里重点修改问题。当然,如果你真的想用这种当前的方法做点什么,那么最好去掉“最佳方式”部分。
-
关于如何从数组中删除特定元素的问题,有like this one 和this one 涉及到的问题。如果这确实是您的问题,那么您也许可以改写为“排序”问题?
-
您的代码需要 O(n^2) 时间复杂度。这不是最优的。请阅读有关合并排序、堆排序甚至快速排序的信息。如果您想要更快速的方法并且您的数组值不是太多。您可以使用计数排序,所有这些都比您的算法更好。
-
许多著名的算法都有免费的 Fortran 实现,例如,rosettacode.org/wiki/Sorting_algorithms/Shell_sort#Fortran 在rosettacode.org/wiki/Category:Sorting_Algorithms 中选择任何其他@
-
我认为这个问题对新贡献者来说有点苛刻。虽然最后一个问题你们对另一种方法有什么想法吗?确实相当广泛,但制作符合 OP 大纲设计的工作代码为 Fortran 初学者提供了一些宝贵的经验教训。而且,Backus 知道,对于 Fortran 主题的定期贡献者很少,我们或许应该不愿意吓跑新的。
标签: arrays sorting fortran fortran90