program quick_sort
  implicit none
  real :: x(100)
  call random_seed()
  call random_number(x)
  print '(10f8.5)', qsort(x)
  stop
contains
  recursive function qsort(a) result(res)
    real, intent(in) :: a(:)
    real :: res(size(a))
    if (size(a) < 2) then 
     res = a
    else
     res = (/ qsort( pack(a(2:), a(2:) < a(2)) ), a(1), qsort( pack(a(2:), a(2:) >= a(2)) ) /)
    end if
    return
  end function qsort
end program quick_sort