# gsort

クイックソートアルゴリズムによるソート

## 呼び出し手順

    [B [,k]]=gsort(A)
                [B [,k]]=gsort(A,option)
                [B [,k]]=gsort(A,option,direction)

## パラメータ

A

  実数,整数または文字列のベクトル/行列または疎ベクトル.

option

  文字列. ソートの種類(下記)を指定します:

  - 'r' : `A` の各列がソートされます

  - 'c': `A` の各行がソートされます

  - 'g': `A` の全要素がソートされます. デフォルト値です.

  - 'lr': `A`の列の辞書式ソート

  - 'lc': `A`のの行の辞書式ソート

direction

  文字列. ソートの方向を指定します: `'i'` は昇順, `'d'` は降順 (デフォルト)を意味します.

B

  `A`と同じ型と次元の配列.

k

  整数値を有し,`A`と同じ次元の実数配列. 元の添え字を有します.

## 説明

`gsort` は種々のデータ型に関する "クイックソート" アルゴリズムです.

- `B=gsort(A,'g')`, `B=gsort(A,'g','d')` および `B=gsort(A)` は 配列 `A`の要素を`A(:)`として 降順にソートします.

  `B=gsort(A,'g','i')` は `A`の要素を昇順にソートします.

- `B=gsort(A,'lr')` は`A` の行を辞書的に降順にソートします. `B`は, `B`の各行が`B(i,:)>=B(j,:)` (ただし,`i<j`)となるように, 行列`A`の行を並び替えることにより 得られます.

  `B=gsort(A,'lr','i')` は 昇順の辞書的ソートについても同様に動作します.

- `B=gsort(A,'lc')` の列を辞書的に降順にソートします. `B`は, `B`の各列が`B(:,i)>=B(:,j)` (ただし,`i<j`となるように, 行列`A`の列を並び替えることにより 得られます.

  `B=gsort(A,'lc','i')` は 昇順の辞書的ソートについても同様に動作します.

二番目の戻り値引数が指定された場合, `k`に`A`のソートされた値の添え字が 代入されます. `[B,k]=gsort(A,'g')`の場合, `B==A(k)`となります. このアルゴリズムは,等しい値を有する レコードの相対的な順序を保持します.

`v` が複素数の場合, その要素は 大きさ,すなわち, abs(`v`) によりソートされます, 2番目の引数としては`'g'`のみが複素数で使用可能です.

`v` が `%nan` または `%inf` を要素として有する場合, gsort は これらを `'d'` の場合は先頭, `'i'`の場合は末尾に置きます.

## 例

                alr=[1,2,2;
                1,2,1;
                1,1,2;
                1,1,1];
                [alr1,k]=gsort(alr,'lr','i')
                [alr1,k]=gsort(alr,'lc','i')

                v=int32(alr)

                gsort(v)
                gsort(v,'lr','i')
                gsort(v,'lc','i')

                v=['Scilab' '2.6'
                'Scilab' '2.7'
                'xcos' '2.7'
                'Scilab' '3.1'
                'xcos' '3.1'
                'xcos' '4.0'
                'Scilab' '4.0']

                gsort(v,'lr','i')
                gsort(v,'lc','i')

## 参照

- find

## 参考文献

Quick sort algorithm from Bentley & McIlroy's "Engineering a Sort Function". Software---Practice and Experience, 23(11):1249-1265