Сортировка массива строк в алфавитном порядке методом пузырька - C (СИ)
Формулировка задачи:
Доброго времени суток. Прошу помочь в решении следующей задачи:
Не могу понять , как составить цикл по проверке слов , начинающихся на одну и ту же букву.
Написать программу,упорядочивающую массив строк в алфавитном порядке методом пузырька.Использовать указатели на строки.
Тут я вообще не могу ничего толкового сделать,да и как начинаю представлять , что нужно будет каждую букву в слове проверять пузырьком так сразу -ступор Прошу обойтись без сообщений в духе "почитай про такую-то функцию и поймешь". Просто на данный момент ситуация такая , что решить данные задачи сам я не в состоянии. Надеюсь на вашу поддержку и понимание. P.S.Решить надо на Си. (желательно без применения с++)Решение задачи: «Сортировка массива строк в алфавитном порядке методом пузырька»
textual
Листинг программы
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define N 100
#define M 30
void main()
{
char a[N][M];
int n, i;
scanf("%d", &n);
for (i=0; i<n; i++)
scanf("%s", &a[i]);
qsort(a, n, sizeof(char[M]), (int (*)(const void *,const void *)) strcmp);
for (i=0; i<n; i++)
printf("%s\n", a[i]);
}
Объяснение кода листинга программы
В этом коде:
- Объявлены массив строк
aи переменнаяnтипаint, в которую будет записан размер массива строкa. - В цикле
forпроисходит чтение строк из стандартного ввода (подразумевается, что на входе ожидается последовательность строк, разделенных пустой строкой) и запись их в массивa. - В функцию
qsortпередается массивa, его размерn, размер одного элемента массиваM(включая нулевой символ, который является маркером конца строки) и функция сравненияstrcmp, которая используется для сравнения строк в лексикографическом порядке (то есть в алфавитном порядке). - Функция
qsortсортирует массивaв порядке возрастания (по умолчанию) с использованием переданной функции сравнения. - В цикле
forпроисходит вывод отсортированных строк из массиваa. Пояснение по коду: - В функции
mainобъявлена переменнаяnтипаint, в которую будет записан размер массива строкa. - В цикле
forпроисходит чтение строк из стандартного ввода и запись их в массивa. Размер массиваnинициализируется значением переменнойn. - Функция
qsortсортирует массивaв порядке возрастания с использованием функции сравненияstrcmp. - В цикле
forпроисходит вывод отсортированных строк из массиваa. Ошибки в коде: - В функции
mainобъявлена переменнаяnтипаint, но затем она используется как аргумент функцииscanfдля чтения строки, что недопустимо. Правильно было бы объявитьnкакint n; scanf(%d, &n);, а затем использоватьnкак аргумент функцииscanf. - Функция
qsortожидает функцию сравнения, которая возвращает отрицательное значение, если первый аргумент меньше второго, нулевое значение, если они равны, и положительное значение, если первый аргумент больше второго. В данном случае используется функцияstrcmp, которая возвращает значение типаint, но не обязательно отрицательное, если первый аргумент меньше второго. Правильно было бы использовать функцию сравнения, которая возвращает отрицательное значение, если первый аргумент меньше второго, нулевое значение, если они равны, и положительное значение, если первый аргумент больше второго. - В цикле
forпосле сортировки массиваaпроисходит вывод отсортированных строк. Однако вывод строк из массиваaдолжен происходить до сортировки, чтобы пользователь мог видеть исходные строки. - В цикле
forпосле вывода строк из массиваaпроисходит выход из функцииmain, что приводит к тому, что программа завершается после вывода последней строки. Однако обычно в циклеforпосле вывода строк из массиваaпроисходит выход из циклаfor, а не из функцииmain.