This module provides the utility quicksort routines.

name | description |
---|---|

Subroutines contained in this interface:

name | description |
---|---|

From a list of values generates a sort permutation list | |

From a list of values generates a sort permutation list | |

From a list of values generates a sort permutation list |

From a list of values generates a sort permutation list

Note | |
---|---|

From Leonard J. Moss of SLAC: Here is a hybrid QuickSort I wrote a number of i years ago. It is based on suggestions in Knuth, Volume 3, and performs much better than a pure QuickSort on short or partially ordered input arrays. SORTRX uses a hybrid QuickSort algorithm, based on several suggestions in Knuth, Volume 3, Section 5.2.2. In particular, the pivot key [my term] for dividing each subsequence is chosen to be the median of the i first, last, and middle values of the subsequence; and the QuickSort is cut off when a subsequence has 9 or fewer elements, and a straight insertion sort of the entire array is done at the end. The result is comparable to a pure insertion sort for very short arrays, and very fast for very large arrays (of order 12 micro-sec/element on the 3081K for arrays of 10K elements). It is also not subject to the poor performance of the pure QuickSort on partially ordered data. |

name | type | dimension | intent | optional | description |
---|---|---|---|---|---|

real array | (:) | List to be sorted | |||

integer array | (:) | Permutation list | |||

integer | (OUT) | Return status, 0 on success |

real array, `(:)`

, no intent declared

List to be sorted

integer array, `(:)`

, no intent declared

Permutation list

integer, , (OUT)

Return status, 0 on success

ppm_module_data, ppm_module_alloc, ppm_module_error, ppm_module_substop, ppm_module_substart

From a list of values generates a sort permutation list

Note | |
---|---|

From Leonard J. Moss of SLAC: Here is a hybrid QuickSort I wrote a number of i years ago. It is based on suggestions in Knuth, Volume 3, and performs much better than a pure QuickSort on short or partially ordered input arrays. SORTRX uses a hybrid QuickSort algorithm, based on several suggestions in Knuth, Volume 3, Section 5.2.2. In particular, the pivot key [my term] for dividing each subsequence is chosen to be the median of the i first, last, and middle values of the subsequence; and the QuickSort is cut off when a subsequence has 9 or fewer elements, and a straight insertion sort of the entire array is done at the end. The result is comparable to a pure insertion sort for very short arrays, and very fast for very large arrays (of order 12 micro-sec/element on the 3081K for arrays of 10K elements). It is also not subject to the poor performance of the pure QuickSort on partially ordered data. |

name | type | dimension | intent | optional | description |
---|---|---|---|---|---|

integer array | (:) | List to be sorted | |||

integer array | (:) | Permutation list | |||

integer | (OUT) | Return status, 0 on success |

integer array, `(:)`

, no intent declared

List to be sorted

integer array, `(:)`

, no intent declared

Permutation list

integer, , (OUT)

Return status, 0 on success

ppm_module_data, ppm_module_alloc, ppm_module_error, ppm_module_substop, ppm_module_substart

From a list of values generates a sort permutation list

Note | |
---|---|

From Leonard J. Moss of SLAC: Here is a hybrid QuickSort I wrote a number of i years ago. It is based on suggestions in Knuth, Volume 3, and performs much better than a pure QuickSort on short or partially ordered input arrays. SORTRX uses a hybrid QuickSort algorithm, based on several suggestions in Knuth, Volume 3, Section 5.2.2. In particular, the pivot key [my term] for dividing each subsequence is chosen to be the median of the i first, last, and middle values of the subsequence; and the QuickSort is cut off when a subsequence has 9 or fewer elements, and a straight insertion sort of the entire array is done at the end. The result is comparable to a pure insertion sort for very short arrays, and very fast for very large arrays (of order 12 micro-sec/element on the 3081K for arrays of 10K elements). It is also not subject to the poor performance of the pure QuickSort on partially ordered data. |

name | type | dimension | intent | optional | description |
---|---|---|---|---|---|

real array | (:) | List to be sorted | |||

integer array | (:) | Permutation list | |||

integer | (OUT) | Return status, 0 on success |

real array, `(:)`

, no intent declared

List to be sorted

integer array, `(:)`

, no intent declared

Permutation list

integer, , (OUT)

Return status, 0 on success

ppm_module_data, ppm_module_alloc, ppm_module_error, ppm_module_substop, ppm_module_substart