Пожалуйста, помогите мне отладить программу сортировки вставок - PullRequest
0 голосов
/ 21 сентября 2011

Я не могу понять, что с ним не так.

Если ввод: 4,56,5,2, то показанный вывод: 2,4,0,1304.

Если ввод: 27,54,43,26,2, то вывод будет: 2,26,0,1304,0

Если ввод: 34,87,54,4,34, то вывод будет: 4,34,0,1304,0

В основном, только первые два отсортированных номера отображаются в выходных данных, а в других местах 1304 или 0 отображаются для любого набора входных данных.

#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();
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2014

Вот минимальные изменения /* comments */, чтобы ваша программа работала:

#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();
}
0 голосов
/ 21 сентября 2011

Используйте более простой алгоритм:

  1. После прочтения чисел скопируйте массив A в B, чтобы сохранить исходный ввод.

  2. Для сортировки по возрастанию установите i = 0, j = i + 1

  3. цикл j до конца массива, если B [j]

  4. Увеличьте i, установите j = i + 1, перейдите к шагу 3., если i> = size.

  5. печать массивов A и B

Алгоритм можно оптимизировать позже.

...