# 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` получается перестановкой строк матрицы `A` таким образом, чтобы строки `B` удовлетворяли `B(i,:)>=B(j,:)`, если `i<j`.

  `B=gsort(A,'lr','i')` работает аналогично для лексического порядка возрастания.

- `B=gsort(A,'lc')` сортирует столбцы `A` в лексическом порядке убывания. `B` получается перестановкой столбцов матрицы `A` таким образом, чтобы столбцы `B` удовлетворяли `B(:,i)>=B(:,j)`, если `i<j`.

  `B=gsort(A,'lc','i')` работает аналогично для лексического порядка возрастания.

Если требуется, то второй возвращаемый аргумент `k` содержит индексы отсортированных значений в `A`. Если `[B,k]=gsort(A,'g')`, то `B==A(k)`. Алгоритм сохраняет относительный порядок записей с одинаковыми значениями.

Когда `v` является комплексным, элементы сортируются по амплитуде, т. е. abs(`v`). Только `'g'` в качестве второго аргумента работает с комплексными значениями.

С комплексными числами `gsort` может быть перегружена

смотрите макрос: SCI/modules/elementary_functions/macros/%_gsort.sci

Можно делать перегрузку для типов, которые не управляются (отличные от матриц/векторов вещественных, целочисленных или символьных значений, либо разрежённого вектора).

Если `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

- overloading

## Литература

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

## История

5.4.0
Эта функция позволяет делать перегрузку для типов, которые не управляются (отличные от матриц/векторов вещественных, целочисленных или символьных значений, либо разрежённого вектора).