Сортировки выдают неверный результат - 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() пользователь выбирает метод сортировки, вводя число с клавиатуры. Список элементов кода:
- В функции main() используется цикл while(a!=-1), который выполняется до тех пор, пока пользователь не введёт 4, что соответствует выходу из программы.
- В каждой итерации цикла пользователь выбирает метод сортировки, вводя число с клавиатуры.
- Если пользователь ввёл 1, вызывается функция count(), которая сортирует массив методом подсчёта.
- Если пользователь ввёл 2, вызывается функция insert(), которая сортирует массив методом вставки.
- Если пользователь ввёл 3, вызывается функция exchange(), которая сортирует массив методом обмена.
- Если пользователь ввёл 4, выполняется выход из программы.
- Если пользователь ввёл неправильное число, выводится сообщение об ошибке.
- В функции count() используется алгоритм сортировки подсчётом, который не требует дополнительных переменных.
- В функции insert() используется алгоритм сортировки вставки, который использует дополнительную переменную k для хранения элемента для вставки.
- В функции exchange() используется алгоритм сортировки обмена, который использует дополнительную переменную n для хранения элемента для обмена.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д