From 1a7ad30a8364f2c28f3f8766d51e1fa4882aebde Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 22:42:12 +0300 Subject: [PATCH 01/16] Create main.c --- src/hw4_optimalSort/main.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/hw4_optimalSort/main.c diff --git a/src/hw4_optimalSort/main.c b/src/hw4_optimalSort/main.c new file mode 100644 index 0000000..88886ce --- /dev/null +++ b/src/hw4_optimalSort/main.c @@ -0,0 +1,25 @@ +#include + +// Объявление функции +extern int sort_array(int array[], int count); + +// Основной код - объявление массива на 100 чисел, создание счетчика, чтобы знать со сколькими числами надо будет работать, чтение чисел через for с scanf и вывод +int main() { + int array[100]; + int count = 0; + + int i = 0; + while (i < 100 && scanf("%d", &array[i]) == 1) { + i++; + count++; + } + + int moved = sort_array(array, count); + + printf("Отсортированный массив:"); + for (int i = 0; i < count; i++) { + printf("%d ", array[i]); + } + printf("\n"); + return 0; +} From 0fb89794940f03288e015d6c74bcce558f2c2f89 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 22:43:48 +0300 Subject: [PATCH 02/16] Create sort.c --- src/hw4_optimalSort/sort.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/hw4_optimalSort/sort.c diff --git a/src/hw4_optimalSort/sort.c b/src/hw4_optimalSort/sort.c new file mode 100644 index 0000000..c3b5036 --- /dev/null +++ b/src/hw4_optimalSort/sort.c @@ -0,0 +1,16 @@ +int sort_array(int* array, int count) { + int moved_count = 0; + // сортировка пузырьком + for (int i = 0; i < count - 1; i++) { + for (int j = 0; j < count - i - 1; j++) { + if (array[j] > array[j + 1]) { + int temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + moved_count++; + } + } + } + + return moved_count; +} From 7c2289b15319a270cf5c5a896c4a32679776b2d6 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sat, 20 Dec 2025 22:45:56 +0300 Subject: [PATCH 03/16] Create CMakeLists.txt --- src/hw4_optimalSort/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/hw4_optimalSort/CMakeLists.txt diff --git a/src/hw4_optimalSort/CMakeLists.txt b/src/hw4_optimalSort/CMakeLists.txt new file mode 100644 index 0000000..fd2e697 --- /dev/null +++ b/src/hw4_optimalSort/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 4.0) +project(hw4_optimalSort C) + +set(CMAKE_C_STANDARD 17) + +add_executable(hw4_optimalSort + src/hw4_optimalSort/main.c + src/hw4_optimalSort/sort.c +) From ef5bed32fe2c464894d1f9b7693d91aca55c9b98 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Sun, 21 Dec 2025 12:51:20 +0300 Subject: [PATCH 04/16] Fixed CMakeLists.txt --- src/hw4_optimalSort/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hw4_optimalSort/CMakeLists.txt b/src/hw4_optimalSort/CMakeLists.txt index fd2e697..4964079 100644 --- a/src/hw4_optimalSort/CMakeLists.txt +++ b/src/hw4_optimalSort/CMakeLists.txt @@ -4,6 +4,6 @@ project(hw4_optimalSort C) set(CMAKE_C_STANDARD 17) add_executable(hw4_optimalSort - src/hw4_optimalSort/main.c - src/hw4_optimalSort/sort.c + main.c + sort.c ) From ba1cb8395e492167d4c084e7bc943f977b3af205 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:24:01 +0300 Subject: [PATCH 05/16] Update sort.c --- src/hw4_optimalSort/sort.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/hw4_optimalSort/sort.c b/src/hw4_optimalSort/sort.c index c3b5036..e9da2c8 100644 --- a/src/hw4_optimalSort/sort.c +++ b/src/hw4_optimalSort/sort.c @@ -1,16 +1,25 @@ -int sort_array(int* array, int count) { - int moved_count = 0; - // сортировка пузырьком +#include "sort.h" + +int sort_array(int array[], int count) { + int movedCount = 0; + for (int i = 0; i < count - 1; i++) { + int swapped = 0; + for (int j = 0; j < count - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; - moved_count++; + movedCount++; + swapped = 1; } } + + if (!swapped) { + break; + } } - - return moved_count; + + return movedCount; } From d218a63b7dd0500a5c322f99183729433879198d Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:25:37 +0300 Subject: [PATCH 06/16] Update sort.c --- src/hw4_optimalSort/sort.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hw4_optimalSort/sort.c b/src/hw4_optimalSort/sort.c index e9da2c8..9a83732 100644 --- a/src/hw4_optimalSort/sort.c +++ b/src/hw4_optimalSort/sort.c @@ -1,6 +1,7 @@ #include "sort.h" -int sort_array(int array[], int count) { +int sortArray(int array[], int count) +{ int movedCount = 0; for (int i = 0; i < count - 1; i++) { From d092b8d52927a9c7c04f5bca1fb56f93dcf25e62 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:27:51 +0300 Subject: [PATCH 07/16] Update main.c + new names --- src/hw4_optimalSort/main.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/hw4_optimalSort/main.c b/src/hw4_optimalSort/main.c index 88886ce..a5621ae 100644 --- a/src/hw4_optimalSort/main.c +++ b/src/hw4_optimalSort/main.c @@ -1,25 +1,16 @@ #include +#include "sort.h" -// Объявление функции -extern int sort_array(int array[], int count); - -// Основной код - объявление массива на 100 чисел, создание счетчика, чтобы знать со сколькими числами надо будет работать, чтение чисел через for с scanf и вывод -int main() { +int main() +{ int array[100]; int count = 0; - int i = 0; - while (i < 100 && scanf("%d", &array[i]) == 1) { - i++; + while (count < 100 && scanf("%d", &array[count]) == 1) { count++; } - int moved = sort_array(array, count); + int moved = sortArray(array, count); - printf("Отсортированный массив:"); - for (int i = 0; i < count; i++) { - printf("%d ", array[i]); - } - printf("\n"); - return 0; + return moved; } From 04b5d072cd99d5f9f0a40077408d5a9af42e7639 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:29:03 +0300 Subject: [PATCH 08/16] Update CMakeLists.txt with custom commands --- src/hw4_optimalSort/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/hw4_optimalSort/CMakeLists.txt b/src/hw4_optimalSort/CMakeLists.txt index 4964079..70a36e1 100644 --- a/src/hw4_optimalSort/CMakeLists.txt +++ b/src/hw4_optimalSort/CMakeLists.txt @@ -3,7 +3,15 @@ project(hw4_optimalSort C) set(CMAKE_C_STANDARD 17) +add_custom_command( + OUTPUT sort.s + COMMAND gcc -S -O2 sort.c -o sort.s + DEPENDS sort.c +) + add_executable(hw4_optimalSort main.c sort.c + sort.s ) + From 43690125a57d13fa8764e70c1d69e641c961acbf Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:30:18 +0300 Subject: [PATCH 09/16] Create sort.h --- src/hw4_optimalSort/sort.h | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/hw4_optimalSort/sort.h diff --git a/src/hw4_optimalSort/sort.h b/src/hw4_optimalSort/sort.h new file mode 100644 index 0000000..6ab74a9 --- /dev/null +++ b/src/hw4_optimalSort/sort.h @@ -0,0 +1,3 @@ +#pragma once + +int sortArray(int array[], int count); From 93c3599ed74d38499e15f6ae1a3292ee1f307bf4 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:36:47 +0300 Subject: [PATCH 10/16] Create README.md --- src/hw4_optimalSort/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/hw4_optimalSort/README.md diff --git a/src/hw4_optimalSort/README.md b/src/hw4_optimalSort/README.md new file mode 100644 index 0000000..2576f98 --- /dev/null +++ b/src/hw4_optimalSort/README.md @@ -0,0 +1,9 @@ +#Код на С для домашней работы "Оптимальная" сортировка. +Здесь три файла - один main с чтением вводимых чисел, и во втором сортировка пузырьком (для вводимых данных в количестве 100 штук О(n^2) будет быстрым) и заголовочный файл sort.h + +#Запуск: (с созданием ассемлерного файла) +gcc -S -O2 sort.c -o sort.s && gcc -c main.c -o main.o && gcc -c sort.s -o sort.o && gcc main.o sort.o -o sorter + +#Ввод чисел: +./sorter +10 1 9 -1 0 6 #Вводим до 100 чисел и затем завершаем ввод сочетанием Ctrl+D From 8cbbfafc61621bed2d1a616fa3a8b150ef3959bb Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 23 Dec 2025 20:37:06 +0300 Subject: [PATCH 11/16] Fix README.md --- src/hw4_optimalSort/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hw4_optimalSort/README.md b/src/hw4_optimalSort/README.md index 2576f98..50b20f7 100644 --- a/src/hw4_optimalSort/README.md +++ b/src/hw4_optimalSort/README.md @@ -1,9 +1,9 @@ -#Код на С для домашней работы "Оптимальная" сортировка. +# Код на С для домашней работы "Оптимальная" сортировка. Здесь три файла - один main с чтением вводимых чисел, и во втором сортировка пузырьком (для вводимых данных в количестве 100 штук О(n^2) будет быстрым) и заголовочный файл sort.h -#Запуск: (с созданием ассемлерного файла) +# Запуск: (с созданием ассемлерного файла) gcc -S -O2 sort.c -o sort.s && gcc -c main.c -o main.o && gcc -c sort.s -o sort.o && gcc main.o sort.o -o sorter -#Ввод чисел: +# Ввод чисел: ./sorter 10 1 9 -1 0 6 #Вводим до 100 чисел и затем завершаем ввод сочетанием Ctrl+D From 7c96274197441f8de5141e6137aa9fce7f3833a0 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Wed, 24 Dec 2025 12:14:57 +0300 Subject: [PATCH 12/16] New logic for sort.c --- src/hw4_optimalSort/sort.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/hw4_optimalSort/sort.c b/src/hw4_optimalSort/sort.c index 9a83732..267970d 100644 --- a/src/hw4_optimalSort/sort.c +++ b/src/hw4_optimalSort/sort.c @@ -1,26 +1,36 @@ #include "sort.h" -int sortArray(int array[], int count) +int sortArray(int array[], int count) { int movedCount = 0; - + + // Копия массива + int original[100]; + for (int i = 0; i < count; i++) { + original[i] = array[i]; + } + for (int i = 0; i < count - 1; i++) { - int swapped = 0; - + int swapped = 0; for (int j = 0; j < count - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; - movedCount++; - swapped = 1; + swapped = 1; } } - if (!swapped) { - break; + break; + } + } + + for (int i = 0; i < count; i++) { + if (array[i] != original[i]) { + movedCount++; } } - + return movedCount; } + From 097ce336d4a60b872b38e3b83e0cd3ed82d1533c Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Wed, 24 Dec 2025 12:16:43 +0300 Subject: [PATCH 13/16] Update main.c --- src/hw4_optimalSort/main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hw4_optimalSort/main.c b/src/hw4_optimalSort/main.c index a5621ae..207606c 100644 --- a/src/hw4_optimalSort/main.c +++ b/src/hw4_optimalSort/main.c @@ -1,7 +1,7 @@ #include -#include "sort.h" +#include "sort.h" -int main() +int main() { int array[100]; int count = 0; @@ -12,5 +12,12 @@ int main() int moved = sortArray(array, count); + for (int i = 0; i < count; i++) { + // Чтоб удобнее глазками считать колво перестановок + printf("%d ", array[i]); + } + printf("\n"); + + printf("%d ", moved); return moved; } From bf5ae699ad719e2cf04f77c5ec9887d469a0bb29 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Wed, 24 Dec 2025 12:18:48 +0300 Subject: [PATCH 14/16] Removed sort.s from CMakeLists.txt --- src/hw4_optimalSort/CMakeLists.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/hw4_optimalSort/CMakeLists.txt b/src/hw4_optimalSort/CMakeLists.txt index 70a36e1..d1f224d 100644 --- a/src/hw4_optimalSort/CMakeLists.txt +++ b/src/hw4_optimalSort/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 4.0) -project(hw4_optimalSort C) +project(hw4_optimalSort C) set(CMAKE_C_STANDARD 17) @@ -9,9 +9,8 @@ add_custom_command( DEPENDS sort.c ) -add_executable(hw4_optimalSort - main.c +add_executable(hw4_optimalSort + main.c sort.c - sort.s -) +) From 38c2fbe61ecc7e588d1c1f1f5f09c041297361e5 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Fri, 26 Dec 2025 00:31:44 +0300 Subject: [PATCH 15/16] Add easy version of CMakeLists.txt --- src/hw4_optimalSort/CMakeLists.txt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/hw4_optimalSort/CMakeLists.txt b/src/hw4_optimalSort/CMakeLists.txt index d1f224d..504dfb1 100644 --- a/src/hw4_optimalSort/CMakeLists.txt +++ b/src/hw4_optimalSort/CMakeLists.txt @@ -3,14 +3,7 @@ project(hw4_optimalSort C) set(CMAKE_C_STANDARD 17) -add_custom_command( - OUTPUT sort.s - COMMAND gcc -S -O2 sort.c -o sort.s - DEPENDS sort.c -) - add_executable(hw4_optimalSort main.c sort.c - ) From 31df55354a11073bc330d8d37777cfc3b5c6e16f Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Fri, 26 Dec 2025 00:36:44 +0300 Subject: [PATCH 16/16] Update README.md --- src/hw4_optimalSort/README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/hw4_optimalSort/README.md b/src/hw4_optimalSort/README.md index 50b20f7..398d176 100644 --- a/src/hw4_optimalSort/README.md +++ b/src/hw4_optimalSort/README.md @@ -1,9 +1,12 @@ # Код на С для домашней работы "Оптимальная" сортировка. -Здесь три файла - один main с чтением вводимых чисел, и во втором сортировка пузырьком (для вводимых данных в количестве 100 штук О(n^2) будет быстрым) и заголовочный файл sort.h +Здесь четыре файла - один main с чтением вводимых чисел, и во втором сортировка пузырьком (для вводимых данных в количестве 100 штук О(n^2) будет быстрым) и заголовочный файл sort.h, а также CMake для сборки без ассемблера -# Запуск: (с созданием ассемлерного файла) -gcc -S -O2 sort.c -o sort.s && gcc -c main.c -o main.o && gcc -c sort.s -o sort.o && gcc main.o sort.o -o sorter +# Запуск: (с созданием ассемлерного файла с оптимизацией О2) +gcc -S -O2 sort.c -o sort.s && gcc -c main.c -o main.o && gcc -c sort.s -o sort.o && gcc main.o sort.o -o sorterWithASM +./sorterWithASM +10 1 9 -1 0 6 #Вводим до 100 чисел и затем завершаем ввод сочетанием Ctrl+D -# Ввод чисел: -./sorter +# Запуск через CMake: +cmake -B build && cmake --build build +./build/hw4_optimalSort 10 1 9 -1 0 6 #Вводим до 100 чисел и затем завершаем ввод сочетанием Ctrl+D