Пример 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 );

}

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

Используются технологии uCoz