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

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

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

Передо мной была поставлена задача написать код, осуществляющий сортировку рандомно-сгенерированого символьного массива. Сгенерировал нормально, а вот с сортировкой проблема. Синтаксических ошибок не имеется, программа просто падает(Ну разумеется не просто а ввиду кривизны моих рук). Глубокими познаниями в C не располагаю, посему надеюсь, вы тыкнете меня носом, и обьясните что и как. Подозреваю, что накосячил с указателями, но вот где в толк не возьму, выглядит вроде все приемлемо... В общем.. Вот код.
Листинг программы
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. bubblest(char **buff, int stc, int stsz) //Проблемная функция
  8. {
  9. int i, f; //Счетчик, флажок
  10. char *buffer; //Буфер для перемены двух строк местами
  11. buffer = (char*)malloc(stsz*sizeof(char*)); //Выделил память под буфер
  12. do
  13. {
  14. f=1; //Флажок на ноль
  15. for(i=0;i<stc;++i) //поочередно перебираем строки
  16. {
  17. if (strcmp(*buff[i], *buff[i+1])!=0) //Если они не равны(strcmp возвращает ноль при равенстве строк), то:
  18. if (strcmp(*buff[i], *buff[i+1])<0) //Если i-я строка по алфавиту ниже (i+1)-й(strcmp возвращает -1) то
  19. {
  20. buffer=buff[i]; //В буфер помещаем i-ую строку <--------
  21. buff[i]=buff[i+1]; //В i-ую строку помещаем (i+1)-ую строку |
  22. buff[i+1]=buffer; //В (i+1)-ую помещаем то, что в буфере-------
  23. f=0; //Флаажок на ноль, т.к. перестановка совершена.
  24. }
  25. }
  26. }
  27. while(f==0); //Условие цикла(Флаг на нуле => была совершена перестановка(ки))
  28. }
  29. /*void(char **buf, int stc) <<<<<<< Здесь буду реализовывать вывод отсортированного, но до него еще дожить надо
  30. {
  31. int i;
  32.  
  33. }*/
  34. void testst(int stc, int stsz) //Ну собственно функция генерации массива, в ней все
  35. //хорошо, т.к. Если закоментировать "проблемную" функцию сортировки, exeшник не падает
  36. {
  37. int i, a, j, numberst=0;
  38. char *storage;
  39. char **buf;
  40. char alph[10]="asdfghjklp";
  41. storage = (char*)malloc(stsz*stc); //выделяем память для массива
  42. buf = (char**)malloc(stsz*sizeof(char*)); //массив указателей на строки матрицы
  43. for (i=0;i<stc;++i)
  44. {
  45. {
  46. for(j=0;j<stsz;++j)
  47. {
  48. a=rand()%9;
  49. storage[j]=alph[a];
  50. }
  51. storage[j]='\0';
  52. buf[i]= storage;
  53. printf("%s",buf[i]);
  54. }
  55. numberst++;
  56. }
  57. printf("-------------------------------------");
  58. bubblest(buf, stc, stsz);
  59. }
  60.  
  61. int main()
  62. {
  63. srand(time(NULL));
  64. testst(10,80);
  65. getch();
  66. return 0;
  67. }

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

textual
Листинг программы
  1. char* t = storage[i];
  2.  storage[i] = storage[--i];
  3.  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы