Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Сортировка массива строк




Задача сортировки массива строк аналогична задаче сортировки числового массива, и все алгоритмы сортировки чисел могут быть применены для сортировки строк. Разница заключается только в деталях реализации этих алгоритмов. Две основные операции, которые используются в сортировке – это сравнение элементов и перестановка элементов. При сравнении чисел, если выполняется неравенство 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])) {

}

 

то строки будут отсортированы по длине:

 

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 228; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты