Пример 6

/* Сортировка букв в строке методом "пузырька" (bubble sort) */ #define YES 1 #define NO 0 bsort(s) char *s; { register i; /* индекс сравниваемой буквы */ register need = YES; /* надо ли продолжать сортировку ? */ while( need ){ need = NO; /* не надо */ for(i=0; s[i+1]; i++ ) /* условие цикла: мы сравниваем i-ую и i+1-ую буквы, * поэтому и проверяем наличие i+1ой буквы */ if( s[i] > s[i+1] ){ /* в неверном порядке */ swap( &s[i], &s[i+1] ); /* переставить */ need = YES; /* что-то изменилось: надо будет * повторить просмотр массива букв */ } } } /* А вот вариант сортировки, написанный с указателями */ bpsort(s) char *s; { register char *p; register need = YES; while( need ){ need = NO; for( p = s; p[1] != '\0' ; p++ ) if( *p > *(p+1) ){ swap( p, p+1 ); need = YES; } } } /* обмен двух букв, находящихся по адресам s1 и s2 */ swap( s1, s2 ) register char *s1, *s2; { char tmp; /* temporary */ tmp = *s1; *s1 = *s2; *s2 = tmp; } char sample1[] = "Homo homini lupus est - ergo bibamus!"; char sample2[ sizeof sample1 ]; /* массив такого же размера */ main(){ strcpy( sample2, sample1 ); /* скопировать */ bsort ( sample1 ); printf( "%s\n", sample1 ); bpsort( sample2 ); printf( "%s\n", sample2 ); }

© Copyright А. Богатырев, 1992-95
Си в UNIX

Назад | Содержание | Вперед