Упорядочить полученный массив по возрастанию значений (метод пузырька) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Собственно, вот такая задача:

Ввести с клавиатуры строку в строковую переменную (не длиннее 20 символов). Упорядочить полученный массив по возрастанию значений (метод пузырька). Распечатывать строку после каждого переупорядочивания.

Все это в консольном приложении., жду помощи. Заранее, спасибо.

Решение задачи: «Упорядочить полученный массив по возрастанию значений (метод пузырька)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define size 20
 
int main(void)
{
    char string[size + 1];      /* + один элемент под символ '\0' */
    char *pch, *pend;
    int swapped;
    size_t len;
        
    if(fgets(string, size, stdin) == NULL)
    {
        if(ferror(stdin))
            perror("fgets");
        else
            fputs("fgets: no input available\n", stderr);
        exit(EXIT_FAILURE);
    }
 
    len = strlen(string);
 
    if(len == 0)
    {
        fputs("Error: empty string\n", stderr);
        exit(EXIT_FAILURE);
    }
    
    pend = string + len - 1;
    
    if(*pend == '\n')
    {
        if(string == pend)
        {
            fputs("Error: empty string\n", stderr);
            exit(EXIT_FAILURE);
        }
        *pend = '\0';
        --pend;
    }
 
    do
    {
        char *p;
        swapped = 0;
        for(pch = string + 1; pch <= pend; ++pch)
        {
            
            if(*(pch - 1) > *pch)
            {
                char tmp = *pch;
                *pch = *(pch - 1);
                *(pch - 1) = tmp;
                p = pch;
                swapped = 1;
                printf("Reordered: %s\n", string);
            }
        }
        pend = p;
    } while(swapped);
 
    puts(string);
    exit(EXIT_SUCCESS);
}

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

В этом коде используется метод пузырька для сортировки введенной пользователем строки, содержащей ASCII-символы, по возрастанию.

  1. В начале кода определяются необходимые заголовочные файлы и константа размера входной строки.
  2. После этого объявляются и инициализируются переменные:
    • string - строка, в которую считывается ввод пользователя;
    • pch и pend - указатели, используемые для прохода по строке;
    • swapped - флаг, меняющийся при каждом проходе цикла;
    • len - длина строки.
  3. Затем происходит проверка ввода пользователя: если ввод некорректен (например, если пользователь ввёл пустую строку), программа выводит сообщение об ошибке и завершает работу с кодом EXIT_FAILURE.
  4. Далее, используя указатель pend, измеряется длина строки. Если строка пуста, программа выводит сообщение об ошибке и завершает работу с кодом EXIT_FAILURE.
  5. Внутри основного цикла программы происходит сортировка строки методом пузырька. Для этого используется вложенный цикл, который проходит по каждому симвопу строки, начиная со второго. Если текущий символ больше следующего, они меняются местами, и флаг swapped устанавливается в 1.
  6. После завершения внутреннего цикла обновляется значение pend и повторяется основной цикл до тех пор, пока флаг swapped не станет равным 0, что означает, что строка уже отсортирована.
  7. Наконец, отсортированная строка выводится на экран, и программа завершается с кодом EXIT_SUCCESS.

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


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

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

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