2013-04-28 65 views
-4

我已经编写了使用指针进行气泡排序的代码,但是我收到了像LVALUE所要求的错误。如何使用指针执行气泡排序

这是我的代码。请修复此代码。我在交换语法时遇到了错误。请帮助

#include<stdio.h> 
#include<conio.h> 
void sort(int *a,int n); 
void main() 
{ 
    int a[20]; 
    int n,i; 
    clrscr(); 
    printf("Program for BUBBLE SORT\n"); 
    printf("Enter the Number of ELements you want in Array\n"); 
    scanf("%d",&n); 
    printf("Enter the Elements in UNSOTED ARRAY\n"); 
    for(i=0;i<n;i++) 
    { 
     scanf("%d",&a[i]); 
    } 
    printf("The Unsorted ARRAY is:\n"); 
    for(i=0;i<n;i++) 
    { 
     printf("%d\t",a[i]); 
    } 
    printf("\n"); 
    sort(&a,n); 
    getch(); 
} 
void sort(int *a,int n) 
{ 
    int i,temp,j; 
    for(i=1;i<n;i++) 
    { 
     for(j=0;j<n-i;j++) 
     { 
      if((*a+j)==(*a+j+1)) 
      { 
       temp=*a+j; 
       *a+j=*a+j+1; 
       *a+j+1=temp; 
      } 
     } 
    } 
} 
+4

请正确格式化您的代码 - 它现在的形式几乎不可读。 – 2013-04-28 16:09:12

+0

...“请修复此代码”? – Saphrosit 2013-04-28 16:10:16

+3

*请修复此问题。*不,您修复它。如果你不明白“需要LVALUE”是什么意思,请询问一下(但首先要搜索,因为我确信已经有很多答案了)。我们在这里提供帮助,但这不是一项编码服务。 – Caleb 2013-04-28 16:10:17

回答

1

你只是缺少一个括号夫妇的:

if(*(a+j)==*(a+j+1)) 
{ 
    temp=*(a+j); 
    *(a+j)=*(a+j+1); 
    *(a+j+1)=temp; 
} 

他们需要的,因为你要到j添加到,然后解引用该地址。

8

更好的让你的交换部分是这样的:

temp = a[j]; 
a[j] = a[j+1]; 
a[j+1] = temp; 

特别是如果你在C初学者,用指针数学简单数组访问花哨的语法不帮助你了解你自己的代码。

此外,你可能想打电话给你的排序功能是这样的:sort(a, n),因为a已经意味着&a[0]在C.如果你开始投入更多的参考运营商你最终会访问其他的内存比你想要的东西。