Пузырьковая сортировка двумерного символьного массива - C (СИ)

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

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

Передо мной была поставлена задача написать код, осуществляющий сортировку рандомно-сгенерированого символьного массива. Сгенерировал нормально, а вот с сортировкой проблема. Синтаксических ошибок не имеется, программа просто падает(Ну разумеется не просто а ввиду кривизны моих рук). Глубокими познаниями в C не располагаю, посему надеюсь, вы тыкнете меня носом, и обьясните что и как. Подозреваю, что накосячил с указателями, но вот где в толк не возьму, выглядит вроде все приемлемо... В общем.. Вот код.
#include <stdio.h>
#include <time.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

 bubblest(char **buff, int stc, int stsz)           //Проблемная функция
{
    int i, f;                                       //Счетчик, флажок
    char *buffer;                                   //Буфер для перемены двух строк местами
    buffer = (char*)malloc(stsz*sizeof(char*));     //Выделил память под буфер
 
do
{
    f=1;                                            //Флажок на ноль
    for(i=0;i<stc;++i)                              //поочередно перебираем строки
    {
        if (strcmp(*buff[i], *buff[i+1])!=0)        //Если они не равны(strcmp возвращает ноль при равенстве строк), то:
            if (strcmp(*buff[i], *buff[i+1])<0)     //Если i-я строка по алфавиту ниже (i+1)-й(strcmp возвращает -1) то
            {
                buffer=buff[i];                     //В буфер помещаем i-ую строку      <--------
                buff[i]=buff[i+1];                  //В i-ую строку помещаем (i+1)-ую строку     |
                buff[i+1]=buffer;                   //В (i+1)-ую помещаем то, что в буфере-------
                f=0;                                //Флаажок на ноль, т.к. перестановка совершена.
            }
    }
    
}
while(f==0);                                        //Условие цикла(Флаг на нуле => была совершена перестановка(ки))
}
 
/*void(char **buf, int stc)           <<<<<<< Здесь буду реализовывать вывод отсортированного, но до него еще дожить надо
{
    int i;

}*/ 
 
void testst(int stc, int stsz)                      //Ну собственно функция генерации массива, в ней все
                                                    //хорошо, т.к. Если закоментировать "проблемную" функцию сортировки, exeшник не падает
{
    int i, a, j, numberst=0;
    char *storage;
    char **buf;
    char alph[10]="asdfghjklp";                     
 
    storage = (char*)malloc(stsz*stc);               //выделяем память для массива 
    buf = (char**)malloc(stsz*sizeof(char*));        //массив указателей на строки матрицы
 
    for (i=0;i<stc;++i)
    {
        {
        for(j=0;j<stsz;++j)
            {   
            a=rand()%9;
            storage[j]=alph[a];
            }
        storage[j]='\0';
        buf[i]= storage;
        printf("%s",buf[i]);
        }
        
        numberst++;
    }
    printf("-------------------------------------");
    bubblest(buf, stc, stsz);
 
}

int main()
{
    srand(time(NULL));
    testst(10,80);
    getch();
    return 0;
}

Решение задачи: «Пузырьковая сортировка двумерного символьного массива»

textual
Листинг программы
char* t = storage[i];
 storage[i] = storage[--i];
 storage[i] = t;

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

Пузырьковая сортировка двумерного символьного массива:

  1. Переменная t инициализируется значением storage[i] (в этом случае t содержит ссылку на элемент массива storage с индексом i).
  2. Элемент storage[i] заменяется на значение storage[--i], где --i уменьшает значение индекса i на единицу (поскольку индексы в C начинаются с 0, это означает, что storage[--i] будет содержать элемент массива storage с индексом i-1).
  3. Элемент storage[i] заменяется на значение переменной t (т.е. на значение, которое было изначально присвоено переменной t). Эти шаги повторяются для всех элементов массива storage. В результате, элементы массива сортируются в порядке возрастания.

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


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

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

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