2011-09-20 1 views
0

Je ne peux pas comprendre ce qui ne va pas avec elle.S'il vous plaît aidez-moi à déboguer mon Insertion Sort Program

Si entrée: 4,56,5,2 alors la sortie affichée est: 2,4,0,1304.

Si l'entrée: 27,54,43,26,2 puis sortie est montré: 2,26,0,1304,0

Si l'entrée: 34,87,54,4,34 alors montré la sortie est : 4,34,0,1304,0

Fondamentalement, seuls les deux premiers numéros triés sont affichés en sortie et à d'autres endroits 1304 ou 0 est affiché pour tout jeu d'entrée.

#include <conio.h> 
#include <stdio.h> 
void main() 
{ 
    int a[10],b[10]; 
    int i,size,j,k; 
    clrscr(); 
    printf("please tell how many nos you want to enter"); 
    scanf("%d",&size); 
    printf("Enter the nos"); 
    for (i=0;i<size;i++) scanf("%d",&a[i]); 
    b[0]=a[0]; 
    //insertionSort algo ----> 
    for (j=1;j<size;j++) 
    { 
    for (k=j-1;k>=0;k--) 
     //handling comparision with b[0] 
     if (k==0&&(a[j]<b[0])) { 
     b[1]=b[0]; 
     b[0]=a[j]; 
     } 
    //handling comparison with b[1:size-1] 
    if (k>0&&(a[j]<b[k])) { b[k+1]=b[k]; } 
    if (k>=0&&(a[j]>=b[k])) { b[k+1]=b[k]; break; } 
    } 
    for (i=0;i<size;i++) printf("%d\n",b[i]); 
    getch(); 
} 
+0

Quel est le résultat attendu? –

+1

Le résultat attendu est les nombres qui ont été entrés pour être affichés dans un ordre croissant trié – Pradeep

+0

La logique est extrêmement défectueuse. Sortez un morceau de papier, dessinez comment vous pensez que ce programme devrait fonctionner. Il semble que vous ayez commencé à coder sans d'abord comprendre le programme. – Coeffect

Répondre

0

utiliser un algorithme qui est plus simple:

  1. Après avoir lu les numéros, tableau copie A à B pour garder l'entrée d'origine.

  2. Pour trier en ordre croissant, régler i = 0, j = i + 1

  3. boucle j jusqu'à la fin du tableau, si B [j] < B [i] alors échanger les deux nombres. Augmentez i, définissez j = i + 1, passez à l'étape 3. sauf si i> = size.

  4. tableaux print A et B

L'algorithme peut être optimisé plus tard.

+1

alors que le vôtre est un algorithme de tri mais pas son tri par insertion dans un tri spécifique. Dans un tri par insertion, vous ajoutez un autre à une liste triée de telle sorte que la liste résultante est également triée.Par ex: Le tri par insertion est utilisé pour trier cartes. – Pradeep

+0

En effet, pour cela je préférerais une liste chaînée puis au lieu d'un tableau. –

0

Voici les changements minimes avec /* comments */ pour rendre votre programme de travail:

#include <conio.h> 
#include <stdio.h> 
void main() 
{ 
    int a[10],b[10]; 
    int i,size,j,k; 
    clrscr(); 
    printf("please tell how many nos you want to enter"); 
    scanf("%d",&size); 
    printf("Enter the nos"); 
    for (i=0;i<size;i++) scanf("%d",&a[i]); 
    b[0]=a[0]; 
    //insertionSort algo ----> 
    for (j=1;j<size;j++) 
    for (k=j-1;k>=0;k--) 
    { /* the inner loop must contain all the if statements */ 
     //handling comparision with b[0] 
     if (k==0&&(a[j]<b[0])) { 
     b[1]=b[0]; 
     b[0]=a[j]; 
     break; /* done; don't mess with b[0+1] below */ 
     } 
     //handling comparison with b[1:size-1] 
     if (k>0&&(a[j]<b[k])) { b[k+1]=b[k]; } 
     if (k>=0&&(a[j]>=b[k])) { b[k+1]=a[j]; break; } /* =a[j] */ 
    } 
    for (i=0;i<size;i++) printf("%d\n",b[i]); 
    getch(); 
} 
Questions connexes