Разработать алгоритм сортировки по алфавиту, Паскаль
for i:=1 to n-1 do
begin
for x:=1 to n-1 do
begin
if a[x]>a[x+1] then
begin
z:=a[x];
a[x]:=a[x+1];
a[x+1]:=z;
end ; end; end;
for x:=1 to n do write (a[x]);
end.
Здравствуйте, помогите, пожалуйста, разобраться с блок-схемой. Вот сама программа сортировки слов по алфавиту. Но для того, чтобы сделать блок-схему, нужно знать, какие процессы там происходят. или хотя-бы, что означают переменные.
Как отсортировать строки в алфавитном порядке в СИ?
Вот задание, которое я делаю:
Вот программа, которую я написал на данный момент:
Вроде-бы я всё реализовал (скорее всего не очень грамотно), кроме сортировки записей в алфавитном порядке. Я не знаю, правильно ли я сравниваю строки и какой принцип сравнения у них вообще (А > a, б < а, Б > a). подскажите пожалуйста, как всё это работает и как мне отсортировать строки?
How to alphabetically sort strings?
I have been trying to use this c++ program to sort 5 names alphabetically:
If I enter Earl, Don, Chris, Bill, and Andy respectively, I get this:
Could someone please tell me whats wrong with my program?
![]()
6 Answers 6
You could use std::set or std::multiset (if you will allow repeated items) of strings, and it will keep the items sorted automatically (you could even change the sorting criteria if you want).
Язык Си в примерах/Сортировка
Задача «сортировки» (упорядочения) — одна из первых интересных и сложных задач теории алгоритмов. Общие принципы освещает статья «Алгоритмы сортировки», здесь же мы рассматриваем способы упорядочения посредством языка Си.
Содержание
Метод «пузырька» [ править ]
Один из простейших алгоритмов решения — метод «пузырька».
Понятно, что после первого «пробега» самый большой элемент массива окажется на последнем месте. После второго пробега мы будем уверены, что второй по величине элемент находится на предпоследнем месте.
Решив эту задачу, вы докажете, что метод «пузырька» решает задачу сортировки.
Функция qsort из библиотеки stdlib [ править ]
Два оператора for, в которых происходит сортировка, можно заменить на одну строку:
Это функция, описанная в стандартной библиотеке ANSI C и объявлена в заголовочном файле stdlib.h.
Поэтому в начале программы нужно добавить
Функцией qsort можно упорядочивать объекты любой природы. По сути, она предназначена упорядочивать множества блоков байтов равной длины. Второй аргумент функции — это число таких блоков, третий аргумент — длина каждого блока. Первый аргумент — это адрес, где находится начало первого блока (предполагается, что блоки в памяти расположены друг за другом подряд).
Четвёртый аргумент функции qsort — это имя функции, которая умеет сравнивать два элемента массива. В нашем случае это
В силу указанной универсальности функции сортировки, функция сравнения получает в качества аргумента адреса двух блоков, которые нужно сравнить и возвращает 1, 0 или -1:
положительное значение, если a > b 0, если a == b отрицательное значение, если a < b
Поскольку у нас блоки байт — это целые числа (в 32-битной архитектуре это четырёхбайтовые блоки), то необходимо привести данные указатели типа (const void*) к типу (int *) и осуществляется это с помощью дописывания перед указателем выражения «(const int*)». Затем нужно получить значение переменной типа int, которая лежит по этому адресу. Это делается с помощью дописывания спереди звездочки.
Таким образом, мы получили следующую программу
Динамическое выделение памяти [ править ]
Ниже приведена программа, где память под массив выделяется динамически:
Функция malloc (от англ. memory allocation — выделение памяти) делает запрос к ядру операционной системы по выделению заданного количества байт. Единственный аргумент этой функции — число байт, которое вам нужно. В качестве результата функция возвращает указатель на начало выделенной памяти. Указатель на начало выделенной памяти &mbsah — это адрес ячейки памяти, начиная с которого идут N байт, которые вы можете использовать под любые свои нужды. Всю память, которая была выделена с помощью функции malloc, нужно освобождать с помощью функции free. Аргумент функции free — это указатель на начало выделенной когда-то памяти.
Программа упорядочения строк в алфавитном порядке [ править ]
Обратите внимание на сложное приведение типов.
Функция strcmp, объявленная в файле string.h имеет следующий прототип:
То есть функция получает два аргумента — указатели на кусочки памяти, где хранятся элементы типа char, то есть два массива символов, которые не могут быть изменены внутри функции strcmp (запрет на изменение задается с помощью модификатора const) [1] .
В то же время в качестве четвертого элемента функция qsort хотела бы иметь функцию типа
В языке Си можно осуществлять приведение типов являющихся типами функции. В данном примере тип