/* radix sort */
#include
#include
#include
#define LEN 72 /* maximum string length */
#define K 256 /* number of possible characters */
//#define MAX_STRINGS 50
void counting_sort (unsigned char *A[],
unsigned char *B[], int n, int h) {
int C[K];
int i, j;
for (i=0; i
/* all counts are now zero */
for (j=0; j
/* C[i] is number of times character i occurs */
for (i=1; i
/* C[i] is number of times i or less occurs */
for (j=n-1; j>=0; j--) {
/* place elements in the array from largest to smallest */
/* -1 is because arrays start out at 0 in C */
B[C[A[j][h]]-1] = A[j];
C[A[j][h]]--;
}
}
/* this radix sort sorts the n pointers to strings
of size d in the array A
* by the strings they point to.
*/
void radix_sort (unsigned char *A[], int n, int d) {
int i, j;
unsigned char *B[50];
/* we're assuming here that digit 0 is the highest order digit,
* like in real life, not like in the book
*/
for (i=d-1; i>=0; i--) {
/* stable sort A into B */
counting_sort (A, B, n, i);
/* copy the results back into A */
for (j=0; j }
}
/* main program */
int main () {
unsigned char A[50][5+1],
*Ap[50],s[50];
int i, n;
clrscr() ;
/* get a bunch of strings into the array A */
for (n=0;n<8;n++) {
gets (s);
if (feof (stdin)) break;
/* make sure the string is no longer than LEN */
s[LEN] = 0;
/* make sure the string is no shorter than LEN */
while (strlen(s)
/* put the string into the next position in A */
strcpy (A[n++],s);
}
/* make Ap an array of pointers to the strings in A */
for (i=0; i
/* sort the pointers */
radix_sort (Ap,n,LEN);
/* print them out */
for (i=0; i
getch() ;
return 0 ;
}
No comments:
Post a Comment