Path: blob/devel/elmergrid/src/metis-5.1.0/GKlib/sort.c
3206 views
/*!1\file sort.c2\brief This file contains GKlib's various sorting routines34These routines are implemented using the GKSORT macro that is defined5in gk_qsort.h and is based on GNU's GLIBC qsort() implementation.67Additional sorting routines can be created using the same way that8these routines where defined.910\date Started 4/4/0711\author George12\version\verbatim $Id: sort.c 10796 2011-09-23 21:33:09Z karypis $ \endverbatim13*/1415#include <GKlib.h>16171819/*************************************************************************/20/*! Sorts an array of chars in increasing order */21/*************************************************************************/22void gk_csorti(size_t n, char *base)23{24#define char_lt(a, b) ((*a) < (*b))25GK_MKQSORT(char, base, n, char_lt);26#undef char_lt27}282930/*************************************************************************/31/*! Sorts an array of chars in decreasing order */32/*************************************************************************/33void gk_csortd(size_t n, char *base)34{35#define char_gt(a, b) ((*a) > (*b))36GK_MKQSORT(char, base, n, char_gt);37#undef char_gt38}394041/*************************************************************************/42/*! Sorts an array of integers in increasing order */43/*************************************************************************/44void gk_isorti(size_t n, int *base)45{46#define int_lt(a, b) ((*a) < (*b))47GK_MKQSORT(int, base, n, int_lt);48#undef int_lt49}505152/*************************************************************************/53/*! Sorts an array of integers in decreasing order */54/*************************************************************************/55void gk_isortd(size_t n, int *base)56{57#define int_gt(a, b) ((*a) > (*b))58GK_MKQSORT(int, base, n, int_gt);59#undef int_gt60}616263/*************************************************************************/64/*! Sorts an array of floats in increasing order */65/*************************************************************************/66void gk_fsorti(size_t n, float *base)67{68#define float_lt(a, b) ((*a) < (*b))69GK_MKQSORT(float, base, n, float_lt);70#undef float_lt71}727374/*************************************************************************/75/*! Sorts an array of floats in decreasing order */76/*************************************************************************/77void gk_fsortd(size_t n, float *base)78{79#define float_gt(a, b) ((*a) > (*b))80GK_MKQSORT(float, base, n, float_gt);81#undef float_gt82}838485/*************************************************************************/86/*! Sorts an array of doubles in increasing order */87/*************************************************************************/88void gk_dsorti(size_t n, double *base)89{90#define double_lt(a, b) ((*a) < (*b))91GK_MKQSORT(double, base, n, double_lt);92#undef double_lt93}949596/*************************************************************************/97/*! Sorts an array of doubles in decreasing order */98/*************************************************************************/99void gk_dsortd(size_t n, double *base)100{101#define double_gt(a, b) ((*a) > (*b))102GK_MKQSORT(double, base, n, double_gt);103#undef double_gt104}105106107/*************************************************************************/108/*! Sorts an array of gk_idx_t in increasing order */109/*************************************************************************/110void gk_idxsorti(size_t n, gk_idx_t *base)111{112#define idx_lt(a, b) ((*a) < (*b))113GK_MKQSORT(gk_idx_t, base, n, idx_lt);114#undef idx_lt115}116117118/*************************************************************************/119/*! Sorts an array of gk_idx_t in decreasing order */120/*************************************************************************/121void gk_idxsortd(size_t n, gk_idx_t *base)122{123#define idx_gt(a, b) ((*a) > (*b))124GK_MKQSORT(gk_idx_t, base, n, idx_gt);125#undef idx_gt126}127128129130131/*************************************************************************/132/*! Sorts an array of gk_ckv_t in increasing order */133/*************************************************************************/134void gk_ckvsorti(size_t n, gk_ckv_t *base)135{136#define ckey_lt(a, b) ((a)->key < (b)->key)137GK_MKQSORT(gk_ckv_t, base, n, ckey_lt);138#undef ckey_lt139}140141142/*************************************************************************/143/*! Sorts an array of gk_ckv_t in decreasing order */144/*************************************************************************/145void gk_ckvsortd(size_t n, gk_ckv_t *base)146{147#define ckey_gt(a, b) ((a)->key > (b)->key)148GK_MKQSORT(gk_ckv_t, base, n, ckey_gt);149#undef ckey_gt150}151152153/*************************************************************************/154/*! Sorts an array of gk_ikv_t in increasing order */155/*************************************************************************/156void gk_ikvsorti(size_t n, gk_ikv_t *base)157{158#define ikey_lt(a, b) ((a)->key < (b)->key)159GK_MKQSORT(gk_ikv_t, base, n, ikey_lt);160#undef ikey_lt161}162163164/*************************************************************************/165/*! Sorts an array of gk_ikv_t in decreasing order */166/*************************************************************************/167void gk_ikvsortd(size_t n, gk_ikv_t *base)168{169#define ikey_gt(a, b) ((a)->key > (b)->key)170GK_MKQSORT(gk_ikv_t, base, n, ikey_gt);171#undef ikey_gt172}173174175/*************************************************************************/176/*! Sorts an array of gk_i32kv_t in increasing order */177/*************************************************************************/178void gk_i32kvsorti(size_t n, gk_i32kv_t *base)179{180#define ikey_lt(a, b) ((a)->key < (b)->key)181GK_MKQSORT(gk_i32kv_t, base, n, ikey_lt);182#undef ikey_lt183}184185186/*************************************************************************/187/*! Sorts an array of gk_i32kv_t in decreasing order */188/*************************************************************************/189void gk_i32kvsortd(size_t n, gk_i32kv_t *base)190{191#define ikey_gt(a, b) ((a)->key > (b)->key)192GK_MKQSORT(gk_i32kv_t, base, n, ikey_gt);193#undef ikey_gt194}195196197/*************************************************************************/198/*! Sorts an array of gk_i64kv_t in increasing order */199/*************************************************************************/200void gk_i64kvsorti(size_t n, gk_i64kv_t *base)201{202#define ikey_lt(a, b) ((a)->key < (b)->key)203GK_MKQSORT(gk_i64kv_t, base, n, ikey_lt);204#undef ikey_lt205}206207208/*************************************************************************/209/*! Sorts an array of gk_i64kv_t in decreasing order */210/*************************************************************************/211void gk_i64kvsortd(size_t n, gk_i64kv_t *base)212{213#define ikey_gt(a, b) ((a)->key > (b)->key)214GK_MKQSORT(gk_i64kv_t, base, n, ikey_gt);215#undef ikey_gt216}217218219/*************************************************************************/220/*! Sorts an array of gk_zkv_t in increasing order */221/*************************************************************************/222void gk_zkvsorti(size_t n, gk_zkv_t *base)223{224#define zkey_lt(a, b) ((a)->key < (b)->key)225GK_MKQSORT(gk_zkv_t, base, n, zkey_lt);226#undef zkey_lt227}228229230/*************************************************************************/231/*! Sorts an array of gk_zkv_t in decreasing order */232/*************************************************************************/233void gk_zkvsortd(size_t n, gk_zkv_t *base)234{235#define zkey_gt(a, b) ((a)->key > (b)->key)236GK_MKQSORT(gk_zkv_t, base, n, zkey_gt);237#undef zkey_gt238}239240241/*************************************************************************/242/*! Sorts an array of gk_fkv_t in increasing order */243/*************************************************************************/244void gk_fkvsorti(size_t n, gk_fkv_t *base)245{246#define fkey_lt(a, b) ((a)->key < (b)->key)247GK_MKQSORT(gk_fkv_t, base, n, fkey_lt);248#undef fkey_lt249}250251252/*************************************************************************/253/*! Sorts an array of gk_fkv_t in decreasing order */254/*************************************************************************/255void gk_fkvsortd(size_t n, gk_fkv_t *base)256{257#define fkey_gt(a, b) ((a)->key > (b)->key)258GK_MKQSORT(gk_fkv_t, base, n, fkey_gt);259#undef fkey_gt260}261262263/*************************************************************************/264/*! Sorts an array of gk_dkv_t in increasing order */265/*************************************************************************/266void gk_dkvsorti(size_t n, gk_dkv_t *base)267{268#define dkey_lt(a, b) ((a)->key < (b)->key)269GK_MKQSORT(gk_dkv_t, base, n, dkey_lt);270#undef dkey_lt271}272273274/*************************************************************************/275/*! Sorts an array of gk_fkv_t in decreasing order */276/*************************************************************************/277void gk_dkvsortd(size_t n, gk_dkv_t *base)278{279#define dkey_gt(a, b) ((a)->key > (b)->key)280GK_MKQSORT(gk_dkv_t, base, n, dkey_gt);281#undef dkey_gt282}283284285/*************************************************************************/286/*! Sorts an array of gk_skv_t in increasing order */287/*************************************************************************/288void gk_skvsorti(size_t n, gk_skv_t *base)289{290#define skey_lt(a, b) (strcmp((a)->key, (b)->key) < 0)291GK_MKQSORT(gk_skv_t, base, n, skey_lt);292#undef skey_lt293}294295296/*************************************************************************/297/*! Sorts an array of gk_skv_t in decreasing order */298/*************************************************************************/299void gk_skvsortd(size_t n, gk_skv_t *base)300{301#define skey_gt(a, b) (strcmp((a)->key, (b)->key) > 0)302GK_MKQSORT(gk_skv_t, base, n, skey_gt);303#undef skey_gt304}305306307/*************************************************************************/308/*! Sorts an array of gk_idxkv_t in increasing order */309/*************************************************************************/310void gk_idxkvsorti(size_t n, gk_idxkv_t *base)311{312#define idxkey_lt(a, b) ((a)->key < (b)->key)313GK_MKQSORT(gk_idxkv_t, base, n, idxkey_lt);314#undef idxkey_lt315}316317318/*************************************************************************/319/*! Sorts an array of gk_idxkv_t in decreasing order */320/*************************************************************************/321void gk_idxkvsortd(size_t n, gk_idxkv_t *base)322{323#define idxkey_gt(a, b) ((a)->key > (b)->key)324GK_MKQSORT(gk_idxkv_t, base, n, idxkey_gt);325#undef idxkey_gt326}327328329