Сортировки выдают неверный результат - 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 для хранения элемента для обмена.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д