русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-08-14; просмотров: 2137; Нарушение авторских прав


Практически любой алгоритм сортировки состоит из комбинации двух элементарных операций: сравнение элементов и перестановка элементов. Алгоритмы сортировки не зависят от того, чем являются элементы массива: числами, символами, строками, структурами и т.д. Однако реализация этих двух операций может различаться. Рассмотрим, как данные операции реализуются при сортировке массива строк.

Для начала нужно определиться с тем, как будет выполняться сортировка. Данный вопрос возникает потому, что строки можно сортировать по алфавиту, по длине строки, по первой букве и т.д. Кроме того, как и всегда порядок может быть прямым (по возрастанию) и обратным (по убыванию).

Вначале вспомним алгоритм сортировки методом прямого выбора (по возрастанию):

  • Находим минимальный элемент и меняем его местами с первым;
  • Находим минимальный элемент, начиная со второго, и меняем его местами со вторым;
  • Находим минимальный элемент, начиная с третьего, и меняем его местами с третьим;

Теперь рассмотрим, как применить этот алгоритм для сортировки массива строк по алфавиту по возрастанию. Для поиска минимального элемента следует использовать оператор > или <. Перестановка элементов осуществляется стандартно в три присваивания. Расширим наш список писателей и отсортируем его.

 

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

 

//Объявляем массив глобально, чтобы

//его видели все функции

const int size = 10;

string writers[size] = {

"Толстой", "Достоевский", "Твен",

"Майн Рид", "Горький", "Чехов",

"Дефо", "Тургенев", "Островский",

"Берроуз"

};

 

//Вывод на экран

void printWriters() {



for (int i=0; i<size; i++) {

cout << writers[i] << endl;

}

}

 

//Меняем местами строки номер i и j

void swap(int i, int j) {

string temp;

temp = writers[i];

writers[i] = writers[j];

writers[j] = temp;

}

 

//Поиск индекса минимального элемента,

//начиная с элемента номер startPosition

int findMin(int startPosition) {

int j_min = startPosition;

for (int j=startPosition; j<size; j++) {

//Сравнение элементов

if (writers[j_min] > writers[j]) {

j_min = j;

}

}

return j_min;

}

 

//Сортировка методом прямого выбора

void sortWriters() {

for (int i=0; i<size-1; i++) {

//Ищем индекс минимального, начиная с i-го

int j_min = findMin(i);

//меняем местами его и i-ый

swap(i, j_min);

}

}

 

int main() {

setlocale(LC_ALL, "Russian");

cout << "Исходный массив:\n";

printWriters();

sortWriters();

cout << "\nОтсортированный массив:\n";

printWriters();

return 0;

}

 

 

Для сортировки массива строк по длине достаточно изменить сравнение:

if (writers[j_min].length() > writers[j].length()) {

}

 

 

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

 

#include "stdafx.h"

#include <iostream>

#include <string>

#include <windows.h>

#include <ctime>

using namespace std;

 

const int n = 20;

string cities[20] = {

"Нижний Новгород", "Москва", "Красноярск",

"Новосибирск", "Новый Уренгой",

"Набережные Челны", "Одесса", "Барселона",

"Лондон", "Нижний Тагил", "Сочи", "Ясная Поляна",

"Барнаул", "Сергиев Посад", "Томск",

"Омск", "Челябинск", "Великий Устюг",

"Киев", "Иркутск"

};

 

void printCities() {

for (int i=0; i<n; i++) {

cout << cities[i] << endl;

}

}

 

string longestString() {

string result = cities[0];

for (int i=1; i<n; i++) {

if (result.length() < cities[i].length()) {

result = cities[i];

}

}

return result;

}

 

int totalSymbols() {

int result = 0;

for (int i=0; i<n; i++) {

result += cities[i].length();;

}

return result;

}

 

void sortCities() {

for (int i=0; i<n-1; i++) {

int j_max = i;

for (int j=i+1; j<n; j++) {

if (cities[j_max] > cities[j]) {

j_max = j;

}

}

string temp = cities[i];

cities[i] = cities[j_max];

cities[j_max] = temp;

}

}

 

void startWith(char firstLetter) {

for (int i=0; i<n; i++) {

if (cities[i][0] == firstLetter) {

cout << cities[i];

}

}

}

 

void printMenu() {

cout << "1 - Вывести все города\n";

cout << "2 - Отсортировать по алфавиту\n";

cout << "3 - Города, начинающиеся в буквы...\n";

cout << "4 - Город с самым длинным названием\n";

cout << "5 - Сколько всего символов\n";

cout << "0 - Выход\n";

}

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

 

while (true) {

printMenu();

int choice;

cout << "Ваш выбор - ";

cin >> choice;

switch (choice) {

case 1 :

printCities();

break;

case 2 :

sortCities();

break;

case 3 :

cout << "Введите букву: ";

char letter;

cin >> letter;

startWith(letter);

break;

case 4 :

cout << longestString() + "\n";

break;

case 5 :

cout << totalSymbols() << endl;

break;

case 0 :

exit(EXIT_SUCCESS);

default :

cout << "Неправильный выбор\n";

}

system("pause");

system("cls");

}

return 0;

}

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Как объявить массив строк?
  2. Как инициализировать массив строк?
  3. Как присвоить значения элементам массива строк?
  4. Как отсортировать массив строк?
  5. Как отсортировать массив строк по длине?


<== предыдущая лекция | следующая лекция ==>
Присвоение элементов массива строк | Понятие, цель и задачи государственного мониторинга земель.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.208 сек.