Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Поиск и сортировка > gsort

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 — find indices of boolean vector or matrix true elements
  • overloading — возможности перегрузки отображения, функций и операторов

Литература

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

История

ВерсияОписание
5.4.0 Эта функция позволяет делать перегрузку для типов, которые не управляются (отличные от матриц/векторов вещественных, целочисленных или символьных значений, либо разрежённого вектора).
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:13:21 CET 2017