Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/hw4_optimalSort/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 4.0)
project(hw4_optimalSort C)

set(CMAKE_C_STANDARD 17)

add_executable(hw4_optimalSort
main.c
sort.c
)
12 changes: 12 additions & 0 deletions src/hw4_optimalSort/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Код на С для домашней работы "Оптимальная" сортировка.
Здесь четыре файла - один main с чтением вводимых чисел, и во втором сортировка пузырьком (для вводимых данных в количестве 100 штук О(n^2) будет быстрым) и заголовочный файл sort.h, а также CMake для сборки без ассемблера

# Запуск: (с созданием ассемлерного файла с оптимизацией О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

# Запуск через CMake:
cmake -B build && cmake --build build
./build/hw4_optimalSort
10 1 9 -1 0 6 #Вводим до 100 чисел и затем завершаем ввод сочетанием Ctrl+D
23 changes: 23 additions & 0 deletions src/hw4_optimalSort/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <stdio.h>
#include "sort.h"

int main()
{
int array[100];
int count = 0;

while (count < 100 && scanf("%d", &array[count]) == 1) {
count++;
}

int moved = sortArray(array, count);

for (int i = 0; i < count; i++) {
// Чтоб удобнее глазками считать колво перестановок
printf("%d ", array[i]);
}
printf("\n");

printf("%d ", moved);
return moved;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Где-то у Вас ошибка. На вводе 1 8 2 15 получается 1, а должно быть 2.

}
36 changes: 36 additions & 0 deletions src/hw4_optimalSort/sort.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include "sort.h"

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;
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;
swapped = 1;
}
}
if (!swapped) {
break;
}
}

for (int i = 0; i < count; i++) {
if (array[i] != original[i]) {
movedCount++;
}
}

return movedCount;
}

3 changes: 3 additions & 0 deletions src/hw4_optimalSort/sort.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

int sortArray(int array[], int count);