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

标签 c algorithm sorting

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

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

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

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

最佳答案

正确的解决方法是:

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

上面其他人的评论是完全正确的。您必须使用取消引用。阅读有关指针的更多信息并使用调试。如果您不知道,请从打印出所有值开始。

关于c - c中使用指针的交换排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636452/

相关文章:

c - 你如何在 C 中实现一个类?

c - 我怎样才能编写一个程序来检查数组是否按降序、升序或没有?

algorithm - 我们能说任何线段树都是平衡的吗?

c - C语言中的选择排序

javascript - 如何在 JavaScript 中根据数组中对象的属性对数组进行排序

ruby - <=> 和 - 在 sort 方法的 block 中有什么区别?

c - 使用 cvPutText()

c - 如何根据不同的源模块上下文突出显示公共(public)头文件?

c# - 对数组中的 x/n 元素进行排序的最有效方法 - .NET

c - 在链表上应用冒泡排序会在 c 中给出错误的输出