Это довольно сложный код для нахождения последовательности, когда вы можете просто развернуть пузырьковую сортировку (и, прежде чем кто-либо нападет на использование пузырьковой сортировки, вы должны знать, что в некоторых случаях это вполне приемлемо, например, гдеданные уже в основном отсортированы, или если набор данных невелик - в этих случаях он может очень часто превосходить другие виды):
#include <stdio.h>
void orders_char(int c1, int c2, int c3) {
int tmp;
// Unrolled bubble sort for three elements.
if (c1 > c2) { tmp = c1; c1 = c2; c2 = tmp; }
if (c2 > c3) { tmp = c2; c2 = c3; c3 = tmp; }
if (c1 > c2) { tmp = c1; c1 = c2; c2 = tmp; }
printf("Ordered characters are: %c %c %c\n", c1, c2, c3);
}
int main (void) {
char c1, c2 ,c3;
printf("Please enter 3 capital letters with no spaces: \n");
scanf("%c%c%c", &c1, &c2, &c3);
orders_char(c1, c2, c3);
return 0;
}
Приведенная выше функция просто перемещает элементы в правильном порядке с помощьюразумное использование трех сравнений и от нуля до трех свопов, а затем распечатывает их.Вы можете поменять их местами внутри функции, поскольку они являются только локальными переменными и не будут влиять на то, что было передано от вызывающего.
Если вы закомментируете строку приглашения (printf
вmain()
) и выполните следующий скрипт, вы увидите, что он работает для всех входных данных:
pax> for i in abc acb bac bca cab cba ; do
...> echo $i | ./sort3
...> done
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c
Ordered characters are: a b c