Сортировки выдают неверный результат - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста. Написала три вида сортировки: подсчетом, методом вставок, обменом (пузырьком). Они работают, но результат выдают неправильный. Может я где-то ошиблась? Помогите, пожалуйста.
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 5
 
void count (int X[])
{
    int Y[SIZE], i, j;
 
    for (i = 0; i < SIZE; i++) 
    { 
        j = i; 
            while (j > 0 && Y[j-1] > X[i])
            {
                Y[j] = Y[j-1];
                    j = j - 1;
            }
 
        Y[j] = X[i];
    }
 
printf("\n Sorted massive: \n");
 
    for(i=0; i<SIZE; i++)
    printf("%d\t", X[i]);
}

void insert (int X[])
{
    int i, j, k; 
 
    for (i=1; i<SIZE; i++)
    {
        k=X[i] ; // запоминание элемента для вставки
            for (j=i-1; j>=0 && k<X[j] ; j--) // ищем место для вставки
                X[j+1] =X[j] ; // сдвиг на одну позицию
                    X[j+1] =k;
    }
 
    printf("\n Sorted massive: \n");
 
        for(i=0; i<SIZE; i++)
        printf("%d\t", X[i]);
}
 
void exchange (int X[])
{
    int i, j, n;
 
    for(i=0; i<SIZE-1; i++)
        for (j=SIZE-2; j>=i; j--)
 
    if (X[j]>X[j+1])
    {
        n=X[j];
            X[j]=X[j+1];
                X[j+1] = n;
    }
printf("\n Sorted massive: \n");
 
    for(i=0; i<SIZE; i++)
    printf("%d\t", X[i]);
}
 
int main()
{
  int S[SIZE], a, i; 
  
  for (i=0; i<SIZE; i++)
  {
      printf ("S[%d]=", i+1); 
      scanf ("%d", &S[i]); 
  }
  
   while(a!=0)
  {  
      printf ("Input number of menu: \n 1. Sorting by counting; \n 2. Simple method inserts; \n 3. Exchange sorting; \n 4. Exit\n"); 
      scanf ("%d", &a); 
      
      if(a==1)    count(S[SIZE]);
      if(a==2)    insert(S[SIZE]);
      if(a==3)    exchange(S[SIZE]);
      if(a==4)    break; 
      else printf ("Wrong number of menu\n"); 
   } 

   system("PAUSE"); 
   return 0;
}

Решение задачи: «Сортировки выдают неверный результат»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 5
 
void count (int X[])
{
    int Y[SIZE], i, j;
 
    for (i = 0; i < SIZE; i++) 
    { 
        j = i; 
            while (j > 0 && Y[j-1] > X[i])
            {
                Y[j] = Y[j-1];
                    j = j - 1;
            }
 
        Y[j] = X[i];
    }
 
printf("\n Sorted massive: \n");
 
    for(i=0; i<SIZE; i++)
    printf("%d\t", Y[i]);
}
 
 
void insert (int X[])
{
    int i, j, k; 
 
    for (i=1; i<SIZE; i++)
    {
        k=X[i] ; // запоминание элемента для вставки
            for (j=i-1; j>=0 && k<X[j] ; j--) // ищем место для вставки
                X[j+1] =X[j] ; // сдвиг на одну позицию
                    X[j+1] =k;
    }
 
    printf("\n Sorted massive: \n");
 
        for(i=0; i<SIZE; i++)
        printf("%d\t", X[i]);
}
 
void exchange (int X[])
{
    int i, j, n;
 
    for(i=0; i<SIZE-1; i++)
        for (j=SIZE-2; j>=i; j--)
 
    if (X[j]>X[j+1])
    {
        n=X[j];
            X[j]=X[j+1];
                X[j+1] = n;
    }
printf("\n Sorted massive: \n");
 
    for(i=0; i<SIZE; i++)
    printf("%d\t", X[i]);
}
 
int main()
{
  int S[SIZE], a, i; 
  
  for (i=0; i<SIZE; i++)
  {
      printf ("S[%d]=", i); 
      scanf ("%d", &S[i]); 
  }
  
   a = -1;
   while(a!=0)
  {  
      printf ("\nInput number of menu: \n 1. Sorting by counting; \n 2. Simple method inserts; \n 3. Exchange sorting; \n 4. Exit\n"); 
      scanf ("%d", &a); 
      
      if(a==1)    count(S);
      else if(a==2)    insert(S);
      else if(a==3)    exchange(S);
      else if(a==4)    return 0; 
      else printf ("Wrong number of menu\n"); 
   } 
  
   
   //system("PAUSE"); 
   return 0;
}

Объяснение кода листинга программы

Код представляет собой сортировку массива методом подсчёта (count), вставки (insert) и обмена (exchange). В функции main() пользователь выбирает метод сортировки, вводя число с клавиатуры. Список элементов кода:

  1. В функции main() используется цикл while(a!=-1), который выполняется до тех пор, пока пользователь не введёт 4, что соответствует выходу из программы.
  2. В каждой итерации цикла пользователь выбирает метод сортировки, вводя число с клавиатуры.
  3. Если пользователь ввёл 1, вызывается функция count(), которая сортирует массив методом подсчёта.
  4. Если пользователь ввёл 2, вызывается функция insert(), которая сортирует массив методом вставки.
  5. Если пользователь ввёл 3, вызывается функция exchange(), которая сортирует массив методом обмена.
  6. Если пользователь ввёл 4, выполняется выход из программы.
  7. Если пользователь ввёл неправильное число, выводится сообщение об ошибке.
  8. В функции count() используется алгоритм сортировки подсчётом, который не требует дополнительных переменных.
  9. В функции insert() используется алгоритм сортировки вставки, который использует дополнительную переменную k для хранения элемента для вставки.
  10. В функции exchange() используется алгоритм сортировки обмена, который использует дополнительную переменную n для хранения элемента для обмена.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы