Сортировка массива строк в алфавитном порядке методом пузырька - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д