2013-04-28 7 views
-4

J'ai écrit ce code pour le tri par bulles à l'aide de pointeurs, mais des erreurs telles que LVALUE sont requises.Comment effectuer un tri par bulles à l'aide de pointeurs

Voici mon code. Veuillez corriger ce code. Je reçois essentiellement des erreurs dans la syntaxe d'échange. S'il vous plaît aider

#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

Veuillez formater votre code correctement - il est pratiquement illisible dans sa forme actuelle. –

+0

... "veuillez corriger ce code" ?? – Saphrosit

+3

* Veuillez corriger ce code. * Non, vous le corrigez. Si vous ne comprenez pas ce que signifie «LVALUE requis», posez des questions à ce sujet (mais faites d'abord une recherche, car je suis sûr qu'il y a déjà plus que quelques réponses à ce sujet). Nous sommes là pour vous aider, mais ce n'est pas un service de codage. – Caleb

Répondre

1

Vous manque seulement quelques parenthèses:

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

Ils sont nécessaires parce que vous voulez ajouter j à un, puis à déréférencer cette adresse.

8

Mieux faire votre section swapping comme ceci:

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

Surtout si vous êtes un débutant en C, la syntaxe de fantaisie avec les mathématiques de pointeur pour un accès simple tableau ne vous aide pas à comprendre votre propre code.

En outre, vous voudrez probablement appeler votre fonction de tri comme ceci: sort(a, n), parce a signifie déjà &a[0] en C. Si vous commencez à lancer plusieurs opérateurs de référence vous finissez accès à d'autres mémoire que ce que vous avez l'intention.