Uploaded image for project: 'Lucy'
  1. Lucy
  2. LUCY-49

Context-aware mergesort and quicksort

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • None
    • None
    • Core
    • None

    Description

      The only sort routine you can count on the system providing is qsort. Some
      systems provide a qsort_r which takes a context argument in addition to the
      items being compared, but not all, and the function signature differs on the
      systems that do provide it (with context being either the first or the last
      argument to the comparison function).

      Lucy::Util::SortUtils provides a context-aware quicksort and a context-aware
      mergesort. The mergesort also exposes merge routines which are optimized for
      use by an external sorter, as they minimize copying.

      The quicksort implementation guards against the classic quicksort worst-case
      behavior with careful pivot selection. One popular quicksort optimization is
      still TODO: using insertion sort for array slices of 10 or fewer elements.
      Implementing that optimization may be worthwhile, as this quicksort will
      probably be used for the first level of token-sorting at index time.

      Attachments

        1. SortUtils.c
          14 kB
          Marvin Humphrey
        2. SortUtils.bp
          3 kB
          Marvin Humphrey

        Activity

          People

            marvin Marvin Humphrey
            marvin Marvin Humphrey
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: