fortran90实现常用归并排序的函数
时间: 2023-07-07 21:27:52 浏览: 72
以下是一个使用归并排序算法实现的 Fortran90 函数:
```
! 递归地将数组拆分,排序并合并
recursive subroutine merge_sort(arr, n)
implicit none
integer, intent(inout) :: arr(n) ! 数组
integer, intent(in) :: n ! 数组长度
integer :: mid, i, j, k
integer, dimension(n) :: tmp
if (n < 2) return ! 如果数组长度小于 2,则不需要排序
mid = n / 2 ! 将数组拆分为两部分
! 递归地对左半部分进行排序
call merge_sort(arr(1:mid), mid)
! 递归地对右半部分进行排序
call merge_sort(arr(mid+1:n), n-mid)
! 合并两部分
i = 1
j = mid + 1
k = 0
do while ((i <= mid) .and. (j <= n))
if (arr(i) < arr(j)) then
k = k + 1
tmp(k) = arr(i)
i = i + 1
else
k = k + 1
tmp(k) = arr(j)
j = j + 1
end if
end do
do while (i <= mid)
k = k + 1
tmp(k) = arr(i)
i = i + 1
end do
do while (j <= n)
k = k + 1
tmp(k) = arr(j)
j = j + 1
end do
! 将排序后的数组复制回原数组
arr(1:n) = tmp(1:k)
end subroutine merge_sort
```
这个函数使用递归地将数组拆分为两部分,对左右两部分分别进行排序,然后合并两部分。递归的结束条件是数组长度小于 2。在合并两部分时,我们使用一个临时数组 `tmp` 来存储排序后的结果,然后将其复制回原数组。
你可以在程序中调用这个函数并传入一个整数数组和数组长度,它将返回排序后的数组。