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