【发布时间】:2020-01-26 03:35:58
【问题描述】:
我可以在一定程度上理解指针,但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()(即如何更好地理解解引用的多层)
【问题讨论】:
-
对于插入排序,左边有一个排序的子数组,右边有一个未排序的子数组。第一个元素可以被认为是排序的,因为它本身是排序的。所以我有点跳过了第一个元素。
-
好吧,还是
for(int i=1;i<rows;i++)比for(int i=1;i<=rows-1;i++)更容易理解。 -
我认为这取决于偏好。我喜欢
<=符号,这样在阅读代码时,我可以看到结尾下标,而无需在脑海中执行“减 1”过程。我猜这仍然只是偏好。