Сортировка массива строк в алфавитном порядке методом пузырька - 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]);
 
 }

Объяснение кода листинга программы

В этом коде:

  1. Объявлены массив строк a и переменная n типа int, в которую будет записан размер массива строк a.
  2. В цикле for происходит чтение строк из стандартного ввода (подразумевается, что на входе ожидается последовательность строк, разделенных пустой строкой) и запись их в массив a.
  3. В функцию qsort передается массив a, его размер n, размер одного элемента массива M (включая нулевой символ, который является маркером конца строки) и функция сравнения strcmp, которая используется для сравнения строк в лексикографическом порядке (то есть в алфавитном порядке).
  4. Функция qsort сортирует массив a в порядке возрастания (по умолчанию) с использованием переданной функции сравнения.
  5. В цикле for происходит вывод отсортированных строк из массива a. Пояснение по коду:
  6. В функции main объявлена переменная n типа int, в которую будет записан размер массива строк a.
  7. В цикле for происходит чтение строк из стандартного ввода и запись их в массив a. Размер массива n инициализируется значением переменной n.
  8. Функция qsort сортирует массив a в порядке возрастания с использованием функции сравнения strcmp.
  9. В цикле for происходит вывод отсортированных строк из массива a. Ошибки в коде:
  10. В функции main объявлена переменная n типа int, но затем она используется как аргумент функции scanf для чтения строки, что недопустимо. Правильно было бы объявить n как int n; scanf(%d, &n);, а затем использовать n как аргумент функции scanf.
  11. Функция qsort ожидает функцию сравнения, которая возвращает отрицательное значение, если первый аргумент меньше второго, нулевое значение, если они равны, и положительное значение, если первый аргумент больше второго. В данном случае используется функция strcmp, которая возвращает значение типа int, но не обязательно отрицательное, если первый аргумент меньше второго. Правильно было бы использовать функцию сравнения, которая возвращает отрицательное значение, если первый аргумент меньше второго, нулевое значение, если они равны, и положительное значение, если первый аргумент больше второго.
  12. В цикле for после сортировки массива a происходит вывод отсортированных строк. Однако вывод строк из массива a должен происходить до сортировки, чтобы пользователь мог видеть исходные строки.
  13. В цикле for после вывода строк из массива a происходит выход из функции main, что приводит к тому, что программа завершается после вывода последней строки. Однако обычно в цикле for после вывода строк из массива a происходит выход из цикла for, а не из функции main.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы