Не знаю, как правильно определить мою функцию подкачки - PullRequest
1 голос
/ 26 января 2020

Я могу до некоторой степени понимать указатели, но множественные уровни разыменования в swap() сбивают меня с толку. Таким образом, я не могу правильно его реализовать.

Ниже приведен код по алфавиту на основе сортировки вставок:

void insertionSort(char **array,int rows,int cols)
{
   for(int i=1;i<=rows-1;i++)
   {
      for(int j=i-1;strcmp(array[i],array[j])<0 && j>=0;j--)
      {
         swap(&array[i],&array[j]);
         i--; //when swapped, subscript of key also drops
      }
   }
}

void swap(char **s1,char**s2)
{
   char **temp=s1;
   strcpy(*s1,*s2);
   strcpy(*s2,*temp);
}

Я знаю, что swap() реализован неправильно. Я надеюсь, что хотел бы знать, как пройти через процесс мышления, чтобы правильно реализовать swap() (ie как лучше понять несколько слоев разыменования)

1 Ответ

0 голосов
/ 26 января 2020

Вы вообще не хотите использовать strcpy. Вы просто хотите поменять местами два char * с, на которые у вас есть указатели (char ** с). Таким образом, реализация должна быть такой же, как и любой другой своп. Временное значение должно быть char *, и вы должны поменять местами значения char *, не копируя строки, которые за ними * l ie.

void swap(char **s1,char **s2)
{
   char *temp = *s1;
   *s1 = *s2;
   *s2 = temp;
}

Это точно так же, как, например, функция для замены int с, за исключением случаев, когда int заменено на char *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...