Cross Reference: strsort.c
xref
: /
osnet-11
/
usr
/
src
/
lib
/
libast
/
common
/
string
/
strsort.c
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
1
N/A
/***********************************************************************
1
N/A
* *
1
N/A
* This software is part of the ast package *
1
N/A
* Copyright (c) 1985-2011 AT&T Intellectual Property *
1
N/A
* and is licensed under the *
1
N/A
* Common Public License, Version 1.0 *
1
N/A
* by AT&T Intellectual Property *
1
N/A
* *
1
N/A
* A copy of the License is available at *
1
N/A
*
http://www.opensource.org/licenses/cpl1.0.txt
*
1
N/A
* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
1
N/A
* *
1
N/A
* Information and Software Systems Research *
1
N/A
* AT&T Research *
1
N/A
* Florham Park NJ *
1
N/A
* *
1
N/A
* Glenn Fowler <gsf@research.att.com> *
1
N/A
* David Korn <dgk@research.att.com> *
1
N/A
* Phong Vo <kpv@research.att.com> *
1
N/A
* *
1
N/A
***********************************************************************/
1
N/A
#
pragma
prototyped
1
N/A
/*
1
N/A
* strsort - sort an array pointers using fn
1
N/A
*
1
N/A
* fn follows strcmp(3) conventions
1
N/A
*
1
N/A
* David Korn
1
N/A
* AT&T Bell Laboratories
1
N/A
*
1
N/A
* derived from Bourne Shell
1
N/A
*/
1
N/A
1
N/A
#
include
<
ast.h
>
1
N/A
1
N/A
void
1
N/A
strsort
(
char
**
argv
,
int
n,
int
(*
fn
)(
const
char
*,
const
char
*))
1
N/A
{
1
N/A
register
int
i;
1
N/A
register
int
j;
1
N/A
register
int
m;
1
N/A
register
char
**
ap
;
1
N/A
char
* s;
1
N/A
int
k;
1
N/A
1
N/A
for
(j =
1
; j <= n; j *=
2
);
1
N/A
for
(m =
2
* j -
1
; m /=
2
;)
1
N/A
for
(j = 0, k = n - m; j < k; j++)
1
N/A
for
(i = j; i >= 0; i -= m)
1
N/A
{
1
N/A
ap
= &
argv
[i];
1
N/A
if
((*
fn
)(
ap
[m],
ap
[0]) >= 0)
break
;
1
N/A
s =
ap
[m];
1
N/A
ap
[m] =
ap
[0];
1
N/A
ap
[0] = s;
1
N/A
}
1
N/A
}