2017-11-08 16 views
0

バブルソートを使ってこの配列をソートしようとしていますが、エラーの種類がわかりました。問題点を理解できませんでした。バブルソートを使ってpostgresqlの配列を並べ替えます。

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> 
+0

それ?詳細を記入してください。 –

+0

ああ、うわー...これは本質的に学問的なんだ。実用的な理由でこれをやりたいのはなぜか想像できないからだ。もしそうならば、バブルソートは良い選択ではないので、配列をソートするのは実際の目的ですか? – Hambone

+0

そこにはたくさんの '()'があります。それらのいくつかを '{}'で置き換えるべきでしょうか?あるいは単に 'BEGIN' /' END'でもあるかもしれません。また、私は 'language'も見ず、ドル記号も見ません。 – wildplasser

答えて

0

明確にするために、私はバブルソートを支持ないんだけど、あなたはそのような何かをしなければならなかった場合、私はそれが次のようになりますと思う:

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']); 

結果:あなたは/ COを解決しようとしている

{1,2,3,3.15,22,55,999} 
{a,aa,b,d,e,j,K,q} 
+0

うん、男はありがとう。しかし、あなたはそれを行う方法私は1と0を使用してDESCまたはASCのための2つの引数を運ぶためにそれを編集しようとしているが、私は再びそれを乱し続ける –

関連する問題