我正在尝试使用指针编写交换排序,而不是索引;
我不明白为什么这段代码不起作用:
void sort(int a[], int n) {
int *i, *j, *temp;
int * const end = a + n;
for(i = a; i < end - 1; i++)
for(j = i + 1; j < end; j++)
if(*i > *j) {
temp = i;
i = j;
j = temp;
}
}
如果我在main中编写此代码,则交换可以正常工作:
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *i = a;
int *j;
int *temp;
i = a;
j = a + 1;
printf("pre-swap - i: %i | j: %i\n", *i, *j);
temp = i;
i = j;
j = temp;
printf("post-swap: i: %i | j: %i\n", *i, *j);
它成功地交换了两个值。
但是当我使用这段代码时,它对数组没有任何作用:
sort(a, 10);
为什么我的排序算法不起作用?
答案 0 :(得分:3)
这是正确的解决方案:
void sort(int a[], int n) {
int *i, *j, temp;
int * const end = a + n;
for(i = a; i < end-1; i++) {
for(j = i + 1; j < end; j++) {
if(*i > *j) {
temp = *i;
*i = *j;
*j = temp;
}
}
}
}
其他人在上面评论的内容完全正确。您必须使用解除引用。阅读有关指针的更多信息并使用调试。如果您不知道,请先打印出所有值。