КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Сортировка массива строкЗадача сортировки массива строк аналогична задаче сортировки числового массива, и все алгоритмы сортировки чисел могут быть применены для сортировки строк. Разница заключается только в деталях реализации этих алгоритмов. Две основные операции, которые используются в сортировке – это сравнение элементов и перестановка элементов. При сравнении чисел, если выполняется неравенство a>b, то мы говорим, что число a «больше» числа b. Самым распространенным вариантом сравнения строк является алфавитный или более общий лексико-графический порядок. Он задается функцией strcmp(), поэтому при сравнении строк вместо
If (Str1<str2)
Нужно писать
If (Strcmp(str1,str2)<0)
Если нужно отсортировать строки по длине, то следует записать так:
If (strlen(str1)<strlen(str2))
Перестановка двух строк также специфична. Поскольку строка представляет собой массив, то шаблон перестановки для чисел не подойдет.
Str1=str2
Необходимо использовать функцию strcpy()
Strcpy(str1,str2)
Следующая программа демонстрирует сортировку строк (жирным шрифтом выделена собственно сортировка):
#define N 8
char names[N][20] = { "Сергей", "Мария", "Василий", "Дмитрий", "Татьяна", "Виталий", "Артем", "Елена" };
void printNames() { for (int i=0; i<N; i++) { puts(names[i]); } }
void sortNames() { for (int i=1; i<N; i++) { for (int j=0; j<N-1; j++) { if (strcmp(names[j],names[j+1]) > 0) { char temp[20]; strcpy(temp, names[j]); strcpy(names[j], names[j+1]); strcpy(names[j+1], temp); } } } }
int main() { puts("До сортировки:"); printNames(); puts("\nПосле сортировки:"); sortNames(); printNames(); }
Если в данном коде изменить условие, поставив вместо
if (strcmp(names[j],names[j+1]) > 0) { … }
условие if (strlen(names[j])<strlen(names[j+1])) { … }
то строки будут отсортированы по длине:
|