Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.02 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION mergesort(A double precision[], p integer, r integer)
  2. RETURNS double precision[] AS $$
  3. SELECT
  4. CASE WHEN p < r THEN mergesort(A,p,floor((p+r)/2)::integer)
  5. WHEN p < r THEN mergesort(A,floor((p+r)/2)::integer+1,r)
  6. WHEN p < r THEN merge(A,p,floor((p+r)/2)::integer,r)
  7. ELSE A
  8. END;
  9. $$ LANGUAGE SQL;
  10.  
  11. CREATE FUNCTION merge(A double precision[], p integer, q integer, r integer)
  12. RETURNS double precision[] AS $$
  13. DECLARE
  14. n1 integer := q-p+1;
  15. n2 integer := r-q;
  16. L double precision[];
  17. Ri double precision[];
  18. g integer;
  19. h integer;
  20. BEGIN
  21. L = ARRAY[n1+1];
  22. Ri = ARRAY[n2+1];
  23. FOR i in 1..(n1+1) LOOP
  24. L[i] = A[p+i-1];
  25. END LOOP;
  26. FOR j in 1..n2+1 LOOP
  27. Ri[j] = A[q+j];
  28. END LOOP;
  29. L[n1+1] = 'Infinity';
  30. Ri[n2+1] = 'Infinity';
  31. g = 1;
  32. h = 1;
  33. FOR k in p..r LOOP
  34. IF L[g] <= Ri[h] THEN
  35. A[k] = L[g];
  36. g = g + 1;
  37. ELSE
  38. A[k] = Ri[h];
  39. h = h + 1;
  40. END IF;
  41. END LOOP;
  42. RETURN A;
  43. END;
  44. $$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement