# #include "order.h"

This page has information from files order.h and order.c.

## Contents

- Public Routines
- Public Definitions
- Introduction

## Public Routines in File order.c

#### Index

compare_vecs | copy_vec | merge_sort | merge_sort_recurse

#### Details

    Ordertype compare_vecs(int *a, int *b, int n);

    void copy_vec(int *a, int *b, int n);

    void merge_sort(void *a[],   /* array to sort */
    		int n,       /* size of array */
    		Ordertype (*comp_proc) (void *, void *));

This is a general-purpose sorting routine. You give it an array of pointers to sort, the size of the array, and a comparison function.

Here is an example of how to use it.

      {
        Term args[MAX_ACM_ARGS];
        int n;

        < set n and put the n terms you wish to sort into args[] >

        merge_sort((void **) args, n, (Ordertype (*)(void*,void*)) term_compare_ncv);

        < args[] is now ordered by term_compare_ncv() >
      }

    void merge_sort_recurse(void *a[],    /* array to sort */
    			void *w[],    /* work array */
    			int start,    /* index of first element */
    			int end,      /* index of last element */
    			Ordertype (*comp_proc) (void *, void *));

This is the recursive part of a general-purpose merge sort. You won't ordinarily call this (use merge_sort instead). Use this only if you manage allocation of the work array.

Here is an example of how to use it.

      {
        Term args[MAX_ACM_ARGS], work[MAX_ACM_ARGS];
        int n;

        < put the n terms you wish to sort into args[] >

        merge_sort_recurse((void **) args, (void **) work, 0, n-1,
                   (Ordertype (*)(void*,void*)) term_compare_ncv);

        < args[] is now ordered by term_compare_ncv() >
      }

## Public Definitions in File order.h

    /* basic order relations */

    typedef enum { NOT_COMPARABLE,
    	       SAME_AS,
    	       LESS_THAN,
    	       GREATER_THAN,
    	       LESS_THAN_OR_SAME_AS,
    	       GREATER_THAN_OR_SAME_AS,
    	       NOT_LESS_THAN,
    	       NOT_GREATER_THAN
                 } Ordertype;

## Introduction

This package defines Ordertype and has a generic sorting routine merge_sort() that can be used to sort any kind of data.