www.pudn.com > PocketC.zip > sort.h


/$sort.h 
#ifndef SORT_I 
#define SORT_I 
 
//(c)T.Frogley all rights reserved 
//codemonkey_uk@hotmail.com 
//reuse without limitation 
 
int swap_size=0; 
pointer swap_buffer; 
swap(pointer a, pointer b, int width) 
{ 
  if(swap_size=base;j=j-width) 
        if((*compare)(swap,j)<0) 
          memcpy(j+width,j,width); 
        else break; 
      memcpy(j+width,swap,width); 
    } 
  }   
  free(swap); 
} 
 
//selection sort 
ssort( 
  pointer base,  
  int num, 
  int width, 
  pointer compare 
) 
{ 
  pointer i, j,end; 
  pointer low; 
 
  end = base+(num-1)*width; 
 
  for (i=base;i i; j=j-width) 
      if((*compare)(j,low)<0) 
        low = j; 
 
    if (low!=i){ 
      swap(low,i,width); 
    } 
  } 
} 
 
//double bubble sort 
dbsort( 
  pointer base,  
  int num, 
  int width, 
  pointer compare 
) 
{ 
  pointer i,end; 
  int done; 
 
  end = base+(num-1)*width; 
 
  do{ 
    done=1; 
    for(i=base;i0){ 
        done=0; 
        swap(i,i+width,width); 
      } 
 
    if (!done) 
    for(done=1;i>base;i=i-width) 
      if((*compare)(i,i-width)<0){ 
        done=0; 
        swap(i,i-width,width); 
      } 
 
  }while(!done); 
} 
 
// general sort 
sort( 
  pointer base,  
  int num, 
  int width, 
  pointer compare 
) 
{ 
  isort( base, num,width,compare); 
} 
 
//for sorting ints, floats 
int compare( 
  pointer a, pointer b 
) 
{ 
  return *b-*a; 
} 
//for sorting ints, floats, reversed 
int reverse_compare( 
  pointer a, pointer b 
) 
{return *a-*b;} 
 
//for sorting strings alphabeticaly 
int comparestr(pointer a, pointer b) 
{ 
  if (*a>*b) return 1; 
  else  if (*a<*b) return -1; 
  else return 0; 
} 
//for sorting strings, reversed 
int reverse_comparestr( 
  pointer a,  
  pointer b 
) 
{ 
  return -comparestr(a,b); 
} 
 
#endif