使用指针的c语言交换排序算法

使用指针的c语言交换排序算法,c,algorithm,sorting,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;

我试图用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;
      }
}
它成功地交换了这两个值

但当我使用以下代码时,它对数组没有任何作用:

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;
            }
        }
    }
}
void排序(int a[],int n){
int*i,*j,温度;
int*const end=a+n;
对于(i=a;i*j){
温度=*i;
*i=*j;
*j=温度;
}
}
}
}

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

它不交换值,而是交换指针。检查a[0]和a[1],它们仍然与交换前相同。
temp=i;i=j;j=温度->
temp=*i*i=*j*j=温度
内部温度强烈建议使用调试器并逐步完成代码。在主要示例中,您说,“它成功地交换了两个值。”-不,您交换了指针值(即交换了指针变量中的地址)。
a[]
中的实际值保持不变。更改指针指向的内容的唯一方法是通过解引用,这是您应该熟悉的,因为您使用它来比较和打印值。记住:指针保存地址。你需要去引用指针来得到那个点指向什么。我很高兴地说,我得到了解决方案!我现在更了解数组指针了。我必须取消引用(*)指针才能访问其值。否则,我将访问存储在指针中的内存地址。@JonathanDewein我很高兴我们都能帮助您:)我看到了您的个人资料,发现您从事过各种技术和科学工作。很高兴你现在正在努力学习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;
            }
        }
    }
}