Пузырьковая сортировка строковых данных
Если нужно отсортировать строковые данные по алфавиту (пусть они и на латинице), подходит ли пузырьковая сортировка? Не подскажете, как её организовать для строковых данных?
Ответы
Лучший ответ
Автор: Support
Ученик
КПД: 16.67 %
Добавлено: 2014-12-19
Ответов: 12
В том числе лучших: 2
Пузырьковая сортировка строк состоит в том, что сравниваются первые символы двух соседних строк. Если первый символ следующей по алфавиту стоит ближе к началу, чем первый символ предыдущей, то они меняются местами. За сравнение отвечает функция strcmp. А в целом принцип тот же, что и при пузырьковой сортировке числовых данных.
Вот возможный вариант сортировки данных о книгах по автору. Код функции, осуществляющей сравнение строк с фамилией автора и дальнейшую сортировку записей по всем полям, общим для объекта "книга":
for (int j=0; j<=b; j++)
{
for (int i=1; i<b; i++)
{
if (strcmp(book_arr2[i-1].author, book_arr2[i].author) > 0)
{
tmp0 = book_arr2[i-1].id;
book_arr2[i-1].id = book_arr2[i].id;
book_arr2[i].id = tmp0;
strcpy(tmp1, book_arr2[i-1].author);
strcpy(book_arr2[i-1].author, book_arr2[i].author);
strcpy(book_arr2[i].author, tmp1);
strcpy(tmp1, book_arr2[i-1].title);
strcpy(book_arr2[i-1].title, book_arr2[i].title);
strcpy(book_arr2[i].title, tmp1);
tmp0 = book_arr2[i-1].year;
book_arr2[i-1].year = book_arr2[i].year;
book_arr2[i].year = tmp0;
strcpy(tmp1, book_arr2[i-1].city);
strcpy(book_arr2[i-1].city, book_arr2[i].city);
strcpy(book_arr2[i].city, tmp1);
strcpy(tmp1, book_arr2[i-1].publisher);
strcpy(book_arr2[i-1].publisher, book_arr2[i].publisher);
strcpy(book_arr2[i].publisher, tmp1);
strcpy(tmp1, book_arr2[i-1].genre);
strcpy(book_arr2[i-1].genre, book_arr2[i].genre);
strcpy(book_arr2[i].genre, tmp1);
strcpy(tmp1, book_arr2[i-1].description);
strcpy(book_arr2[i-1].description, book_arr2[i].description);
strcpy(book_arr2[i].description, tmp1);
tmp0 = book_arr2[i-1].quantity;
book_arr2[i-1].quantity = book_arr2[i].quantity;
book_arr2[i].quantity = tmp0;
}
}
}
1 пользователю нравится этот ответ
Комментариев: 0
Пузырьковая сортировка строк состоит в том, что сравниваются первые символы двух соседних строк. Если первый символ следующей по алфавиту стоит ближе к началу, чем первый символ предыдущей, то они меняются местами. За сравнение отвечает функция strcmp. А в целом принцип тот же, что и при пузырьковой сортировке числовых данных.
Вот возможный вариант сортировки данных о книгах по автору. Код функции, осуществляющей сравнение строк с фамилией автора и дальнейшую сортировку записей по всем полям, общим для объекта "книга":
for (int j=0; j<=b; j++) { for (int i=1; i<b; i++) { if (strcmp(book_arr2[i-1].author, book_arr2[i].author) > 0) { tmp0 = book_arr2[i-1].id; book_arr2[i-1].id = book_arr2[i].id; book_arr2[i].id = tmp0; strcpy(tmp1, book_arr2[i-1].author); strcpy(book_arr2[i-1].author, book_arr2[i].author); strcpy(book_arr2[i].author, tmp1); strcpy(tmp1, book_arr2[i-1].title); strcpy(book_arr2[i-1].title, book_arr2[i].title); strcpy(book_arr2[i].title, tmp1); tmp0 = book_arr2[i-1].year; book_arr2[i-1].year = book_arr2[i].year; book_arr2[i].year = tmp0; strcpy(tmp1, book_arr2[i-1].city); strcpy(book_arr2[i-1].city, book_arr2[i].city); strcpy(book_arr2[i].city, tmp1); strcpy(tmp1, book_arr2[i-1].publisher); strcpy(book_arr2[i-1].publisher, book_arr2[i].publisher); strcpy(book_arr2[i].publisher, tmp1); strcpy(tmp1, book_arr2[i-1].genre); strcpy(book_arr2[i-1].genre, book_arr2[i].genre); strcpy(book_arr2[i].genre, tmp1); strcpy(tmp1, book_arr2[i-1].description); strcpy(book_arr2[i-1].description, book_arr2[i].description); strcpy(book_arr2[i].description, tmp1); tmp0 = book_arr2[i-1].quantity; book_arr2[i-1].quantity = book_arr2[i].quantity; book_arr2[i].quantity = tmp0; } } }