### 12.2 Sorting vectors

The following functions will sort the elements of an array or vector, either directly or indirectly. They are defined for all real and integer types using the normal suffix rules. For example, the `float` versions of the array functions are `gsl_sort_float` and `gsl_sort_float_index`. The corresponding vector functions are `gsl_sort_vector_float` and `gsl_sort_vector_float_index`. The prototypes are available in the header files `gsl_sort_float.h` `gsl_sort_vector_float.h`. The complete set of prototypes can be included using the header files `gsl_sort.h` and `gsl_sort_vector.h`.

There are no functions for sorting complex arrays or vectors, since the ordering of complex numbers is not uniquely defined. To sort a complex vector by magnitude compute a real vector containing the magnitudes of the complex elements, and sort this vector indirectly. The resulting index gives the appropriate ordering of the original complex vector.

Function: void gsl_sort (double * data, const size_t stride, size_t n)

  This function sorts the n elements of the array data with stride stride into ascending numerical order.

Function: void gsl_sort2 (double * data1, const size_t stride1, double * data2, const size_t stride2, size_t n)

  This function sorts the n elements of the array data1 with stride stride1 into ascending numerical order, while making the same rearrangement of the array data2 with stride stride2, also of size n.

Function: void gsl_sort_vector (gsl_vector * v)

  This function sorts the elements of the vector v into ascending numerical order.

Function: void gsl_sort_vector2 (gsl_vector * v1, gsl_vector * v2)

  This function sorts the elements of the vector v1 into ascending numerical order, while making the same rearrangement of the vector v2.

Function: void gsl_sort_index (size_t * p, const double * data, size_t stride, size_t n)

  This function indirectly sorts the n elements of the array data with stride stride into ascending order, storing the resulting permutation in p. The array p must be allocated with a sufficient length to store the n elements of the permutation. The elements of p give the index of the array element which would have been stored in that position if the array had been sorted in place. The array data is not changed.

Function: int gsl_sort_vector_index (gsl_permutation * p, const gsl_vector * v)

  This function indirectly sorts the elements of the vector v into ascending order, storing the resulting permutation in p. The elements of p give the index of the vector element which would have been stored in that position if the vector had been sorted in place. The first element of p gives the index of the least element in v, and the last element of p gives the index of the greatest element in v. The vector v is not changed.