使用指针在c中交换排序算法

时间:2017-06-19 17:21:25

标签: c algorithm sorting

我正在尝试使用指针编写交换排序,而不是索引;

我不明白为什么这段代码不起作用:

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);

为什么我的排序算法不起作用?

1 个答案:

答案 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;
            }
        }
    }
}

其他人在上面评论的内容完全正确。您必须使用解除引用。阅读有关指针的更多信息并使用调试。如果您不知道,请先打印出所有值。