Вопрос:

Сортировать массив в postgresql с помощью пузырьковой сортировки

arrays postgresql sorting

163 просмотра

1 ответ

23 Репутация автора

я пытаюсь отсортировать этот массив, используя пузырьковую сортировку, но вид ошибки, который он мне показывает, не может понять проблему.

create function Arraysort(anyarray,integer)
(
     select case 
    when d=0 then
  (
   DECLARE
  swapped BOOLEAN;
  tmp     VARCHAR2(10);
BEGIN
  LOOP
   swapped := false;
   FOR i IN 1 .. $1.LAST
   LOOP
     IF $1[i-1] > $1[i]
     THEN
       tmp := $1[i];
       $1[i] := $1[i-1];
       $1[i-1] := tmp;

       swapped := true;
      END IF;
   END LOOP;
EXIT WHEN NOT swapped;

  END LOOP; 
        )
)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your             request.  Either the server is overloaded or there is an error in the     application.</p>
Автор: Hussaini Said Adam Источник Размещён: 08.11.2017 10:52

Ответы (1)


0 плюса

10760 Репутация автора

Решение

Чтобы было ясно, я не одобряю пузырьковую сортировку, но если бы вам пришлось делать что-то подобное, я думаю, это выглядело бы так:

CREATE OR REPLACE FUNCTION Arraysort(input_array anyarray,
    e anyelement = null, out results anyarray)
  returns anyarray as
$BODY$
DECLARE
  last_element integer;
  i integer;
  j integer;
BEGIN

  last_element := array_length (input_array, 1) - 1;
  results := input_array;

  for j in 1..last_element loop
    for i in 1..last_element loop

      if results[i] > results[i + 1] then

        e := results[i];
        results[i] := results[i + 1];
        results[i + 1] := e;

      end if;

    end loop;   
  end loop;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

тесты:

select arraysort(array[3, 2, 1, 999, 55, 22, 3.15]);
select arraysort (array['a', 'b', 'q', 'e', 'd', 'j', 'K', 'aa']);

Результаты:

{1,2,3,3.15,22,55,999}
{a,aa,b,d,e,j,K,q}
Автор: Hambone Размещён: 08.11.2017 11:59
Вопросы из категории :
32x32