我准备调用子程序给3个数从小到大排序,然后用指针作为参数传递,用module模块,编译没问题

刚开始的时候,我自己写了个排序算法,如module_1,在子程序里面能正常排序,但子程序返回给主程序时,数值变了,感觉变成了随机赋值的结果,运行结果如下:

然后发现是排序上有问题,换成了常用的3个数排序方法,如module_2,然后输出结果就对了,运行如下:
请各位大神给分析下原因,叩拜了!并献上代码,附件也是代码
代码如下:

module module_1

contains
subroutine sortb(pb1,pb2,pb3)

implicit none


real,pointer :: pb1,pb2,pb3
real,target ::temp1,temp2,temp3


temp1=max(pb1,pb2,pb3)
temp2=min(pb1,pb2,pb3)
if (pb1>temp2.and.pb1 temp3=pb1
else if(pb2>temp2.and.pb2 temp3=pb2
else if(pb3>temp2.and.pb3 temp3=pb3
endif

pb1=>temp2
pb2=>temp3
pb3=>temp1

print *, "subroutine:",pb1,pb2,pb3

return
endsubroutine

endmodule


module module_2

contains
subroutine sortb(pb1,pb2,pb3)

implicit none

real,pointer :: pb1,pb2,pb3
real :: temp

if (pb1>=pb2)then
temp=pb2
pb2=pb1
pb1=temp
endif
if (pb1>=pb3)then
temp=pb3
pb3=pb1
pb1=temp
endif
if (pb2>=pb3)then
temp=pb3
pb3=pb2
pb2=temp
endif

print *, "subroutine:",pb1,pb2,pb3

return
end subroutine
end module


program test
use module_2

implicit none

real,pointer :: pb1,pb2,pb3
real,target :: a=1,b=2,c=3

pb1=>a
pb2=>b
pb3=>c

call sortb(pb1,pb2,pb3)

write(*,*)"main:", pb1,pb2,pb3

end program