#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swap( char ** args1, char ** args2) {
char * tmp = * args1;
* args1 = * args2;
* args2 = tmp;
}
void sort( char ** args, const int start, const int end) {
char * pivot = args[ end] ;
int i = start- 1 , j = start;
while ( j < end ) {
int cmp
= strcmp ( pivot
, args
[ j
] ) ; if ( cmp > 0 )
swap( & args[ ++ i] , & args[ j] ) ;
j++;
}
swap( & args[ ++ i] , args+ end ) ;
if ( start + 1 < i )
sort( args, start, i - 1 ) ;
if ( end - 1 > i )
sort( args, i + 1 , end ) ;
}
void wsort( char ** args, const int count) {
sort( args, 0 , count - 1 ) ;
}
int main( ) {
const int length = 40 ;
const int increment = 20 ;
int size = 20 ;
printf ( "Insert words consisting of up to %d characters. One word for each line.\n " , length
) ; char ** buffer
= calloc ( size
, sizeof ( char * ) ) ; if ( ! buffer )
return 1 ;
int i = 0 ;
for ( ;; ) {
buffer
[ i
] = calloc ( length
, sizeof ( char ) ) ; if ( ! buffer[ i] )
return 2 ;
if ( ! fgets ( buffer
[ i
] , length
, stdin
) ) break ;
i++;
if ( i == size ) {
buffer
= realloc ( buffer
, ( size
+= increment
) * length
* sizeof ( char * ) ) ; if ( ! buffer )
return 3 ;
}
}
printf ( "%d items will be sorted now...\n " , i
) ; wsort( buffer, i ) ;
printf ( "Sorting complete. Here is the resulting list:\n " ) ; for ( int j = 0 ; j < i; j++ )
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKdm9pZCBzd2FwKGNoYXIgKiphcmdzMSwgY2hhciAqKmFyZ3MyKSB7CgljaGFyICp0bXAgPSAqYXJnczE7CgkqYXJnczEgPSAqYXJnczI7CgkqYXJnczIgPSB0bXA7Cn0Kdm9pZCBzb3J0KGNoYXIgKiogYXJncywgY29uc3QgaW50IHN0YXJ0LCBjb25zdCBpbnQgZW5kKSB7CgljaGFyICpwaXZvdCA9IGFyZ3NbZW5kXTsKCWludCBpID0gc3RhcnQtMSwgaiA9IHN0YXJ0OwoJd2hpbGUoIGogPCBlbmQgKSB7CgkJaW50IGNtcCA9IHN0cmNtcCggcGl2b3QsIGFyZ3Nbal0gKTsKCQlpZiggY21wID4gMCApCgkJCXN3YXAoICZhcmdzWysraV0sICZhcmdzW2pdICk7CgkJaisrOwoJfQoJc3dhcCggJmFyZ3NbKytpXSwgYXJncytlbmQgKTsKCWlmKCBzdGFydCArIDEgPCBpICkKCQlzb3J0KCBhcmdzLCBzdGFydCwgaSAtIDEgKTsKCWlmKCBlbmQgLSAxID4gaSApCgkJc29ydCggYXJncywgaSArIDEsIGVuZCApOwp9Cgp2b2lkIHdzb3J0KGNoYXIgKiogYXJncywgY29uc3QgaW50IGNvdW50KSB7Cglzb3J0KCBhcmdzLCAwLCBjb3VudCAtIDEgKTsKfQoKaW50IG1haW4oKSB7Cgljb25zdCBpbnQgbGVuZ3RoID0gNDA7Cgljb25zdCBpbnQgaW5jcmVtZW50ID0gMjA7CglpbnQgc2l6ZSA9IDIwOwoJcHJpbnRmKCAiSW5zZXJ0IHdvcmRzIGNvbnNpc3Rpbmcgb2YgdXAgdG8gJWQgY2hhcmFjdGVycy4gT25lIHdvcmQgZm9yIGVhY2ggbGluZS5cbiIsIGxlbmd0aCApOwoJY2hhciAqKmJ1ZmZlciA9IGNhbGxvYyggc2l6ZSwgc2l6ZW9mKGNoYXIgKikgKTsKCWlmKCAhYnVmZmVyICkKCQlyZXR1cm4gMTsKCWludCBpID0gMDsKCWZvcig7OykgewoJCWJ1ZmZlcltpXSA9IGNhbGxvYyggbGVuZ3RoLCBzaXplb2YoY2hhcikgKTsKCQlpZiggIWJ1ZmZlcltpXSApCgkJCXJldHVybiAyOwoJCWlmKCAhZmdldHMoIGJ1ZmZlcltpXSwgbGVuZ3RoLCBzdGRpbiApICkKCQkJYnJlYWs7CgkJaSsrOwoJCWlmKCBpID09IHNpemUgKSB7CgkJCWJ1ZmZlciA9IHJlYWxsb2MoIGJ1ZmZlciwgKHNpemUrPWluY3JlbWVudCkgKiBsZW5ndGggKiBzaXplb2YoY2hhciAqKSApOwoJCQlpZiggIWJ1ZmZlciApCgkJCQlyZXR1cm4gMzsKCQl9Cgl9CglwcmludGYoICIlZCBpdGVtcyB3aWxsIGJlIHNvcnRlZCBub3cuLi5cbiIsIGkgKTsKCXdzb3J0KCBidWZmZXIsIGkgKTsKCXByaW50ZiggIlNvcnRpbmcgY29tcGxldGUuIEhlcmUgaXMgdGhlIHJlc3VsdGluZyBsaXN0OlxuIiApOwoJZm9yKCBpbnQgaiA9IDA7IGogPCBpOyBqKysgKQoJCXByaW50ZiggIiVzIiwgYnVmZmVyW2pdICApOwp9