home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
kill2.zip
/
kill2src.zip
/
lnksort.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-21
|
1KB
|
54 lines
/* linked list sort -- public domain by Ray Gardner 5/90 -- modified */
#include <stdio.h> /* for NULL definition */
#include <time.h>
struct __filelist2__ {
char *filename;
time_t filedate;
struct __filelist2__ *next;
};
/* split list into 2 parts, sort each recursively, merge */
struct __filelist2__ *msortl (struct __filelist2__ *p) {
struct __filelist2__ *q, *r, *head;
if ( p ) { /* first split it */
r = p;
for ( q = r->next; q && (q = q->next) != NULL; q = q->next )
r = r->next;
q = r->next;
r->next = NULL;
if ( q ) { /* now sort each sublist */
p = msortl(p);
q = msortl(q);
if (q->filedate < p->filedate) { /* smallest item becomes list head */
head = q;
q = q->next;
} else {
head = p;
p = p->next;
}
for (r = head; p && q; ) { /* now merge the lists under head */
if (q->filedate < p->filedate) {
r->next = q;
r = q;
q = q->next;
}
else {
r->next = p;
r = p;
p = p->next;
}
}
r->next = (p ? p : q); /* append the leftovers */
p = head;
}
}
return p;
}