Пузырьковая сортировка двумерного символьного массива - 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;
Объяснение кода листинга программы
Пузырьковая сортировка двумерного символьного массива:
- Переменная
t
инициализируется значениемstorage[i]
(в этом случаеt
содержит ссылку на элемент массиваstorage
с индексомi
). - Элемент
storage[i]
заменяется на значениеstorage[--i]
, где--i
уменьшает значение индексаi
на единицу (поскольку индексы в C начинаются с 0, это означает, чтоstorage[--i]
будет содержать элемент массиваstorage
с индексомi-1
). - Элемент
storage[i]
заменяется на значение переменнойt
(т.е. на значение, которое было изначально присвоено переменнойt
). Эти шаги повторяются для всех элементов массиваstorage
. В результате, элементы массива сортируются в порядке возрастания.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д