From 831fe693409b16319b14ce6e820763d72bd1f118 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 19:53:10 +0300 Subject: [PATCH 1/9] Merge sort header --- src/06oct25/merge_sort.h | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/06oct25/merge_sort.h diff --git a/src/06oct25/merge_sort.h b/src/06oct25/merge_sort.h new file mode 100644 index 0000000..6181fef --- /dev/null +++ b/src/06oct25/merge_sort.h @@ -0,0 +1,4 @@ +#pragma once + +/* Сортировка слиянием */ +void merge_sort(int data[], int size); \ No newline at end of file From f26834189c023e9e6435a8ab162fa332494554a6 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 19:54:15 +0300 Subject: [PATCH 2/9] Merge sort in C --- src/06oct25/merge_sort.c | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/06oct25/merge_sort.c diff --git a/src/06oct25/merge_sort.c b/src/06oct25/merge_sort.c new file mode 100644 index 0000000..97754a1 --- /dev/null +++ b/src/06oct25/merge_sort.c @@ -0,0 +1,44 @@ +#include "merge_sort.h" + +void merge(int left[], int right[], int data[], int left_size, int right_size) +{ + int i = 0, j = 0, k = 0; + + // слияние элементов пока оба массива не пусты + while (i < left_size && j < right_size) { + if (left[i] <= right[j]) + data[k++] = left[i++]; + else + data[k++] = right[j++]; + } + + // добавляем оставшиеся элементы из левого массива + while (i < left_size) + data[k++] = left[i++]; + + // добавляем оставшиеся элементы из правого массива + while (j < right_size) + data[k++] = right[j++]; +} + +void merge_sort(int data[], int size) +{ + if (size <= 1) + return; + + // делим массив на два массива + int mid = size / 2; + int left[mid]; + int right[size - mid]; + + for (int i = 0; i < mid; i++) + left[i] = data[i]; + + for (int i = mid; i < size; i++) + right[i - mid] = data[i]; + + + merge_sort(left, mid); + merge_sort(right, size - mid); + merge(left, right, data, mid, size - mid); +} \ No newline at end of file From 4da9addec6ac6d9637f4e3e0580fee863e737fc0 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 19:55:00 +0300 Subject: [PATCH 3/9] Create main file for sorting --- src/06oct25/main.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/06oct25/main.c diff --git a/src/06oct25/main.c b/src/06oct25/main.c new file mode 100644 index 0000000..ec7ac7c --- /dev/null +++ b/src/06oct25/main.c @@ -0,0 +1,25 @@ +#include +#include "merge_sort.h" + +int main(void) +{ + int number; + int data[100]; + int index = 0; + + printf("введите числа (для завершения нажмите enter+ctrl+d):\n"); + + while (scanf("%d", &number) == 1) { + data[index] = number; + index++; + }; + + merge_sort(data, index); + printf("отсортированные числа:\n"); + + for (int i = 0; i < index; i++) + printf("%d ", data[i]); + printf("\n"); + + return 0; +} \ No newline at end of file From fecebc48342d83df170d817d3f2a68ca1e46be6c Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 20:06:08 +0300 Subject: [PATCH 4/9] Return code count changes --- src/06oct25/main.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/06oct25/main.c b/src/06oct25/main.c index ec7ac7c..8c3082d 100644 --- a/src/06oct25/main.c +++ b/src/06oct25/main.c @@ -5,12 +5,14 @@ int main(void) { int number; int data[100]; + int original_data[100]; int index = 0; printf("введите числа (для завершения нажмите enter+ctrl+d):\n"); while (scanf("%d", &number) == 1) { data[index] = number; + original_data[index] = number; // сохраняем копию исходного массива index++; }; @@ -21,5 +23,13 @@ int main(void) printf("%d ", data[i]); printf("\n"); - return 0; + // подсчитываем различия + int moved_count = 0; + for (int i = 0; i < index; i++) { + if (data[i] != original_data[i]) { + moved_count++; + } + } + + return moved_count; } \ No newline at end of file From 313413a9a36c64e058e346433d1d233b4028d44a Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 20:09:57 +0300 Subject: [PATCH 5/9] Merge sort in Assembler --- src/06oct25/merge_sort.c | 44 ------- src/06oct25/merge_sort.s | 267 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 267 insertions(+), 44 deletions(-) delete mode 100644 src/06oct25/merge_sort.c create mode 100644 src/06oct25/merge_sort.s diff --git a/src/06oct25/merge_sort.c b/src/06oct25/merge_sort.c deleted file mode 100644 index 97754a1..0000000 --- a/src/06oct25/merge_sort.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "merge_sort.h" - -void merge(int left[], int right[], int data[], int left_size, int right_size) -{ - int i = 0, j = 0, k = 0; - - // слияние элементов пока оба массива не пусты - while (i < left_size && j < right_size) { - if (left[i] <= right[j]) - data[k++] = left[i++]; - else - data[k++] = right[j++]; - } - - // добавляем оставшиеся элементы из левого массива - while (i < left_size) - data[k++] = left[i++]; - - // добавляем оставшиеся элементы из правого массива - while (j < right_size) - data[k++] = right[j++]; -} - -void merge_sort(int data[], int size) -{ - if (size <= 1) - return; - - // делим массив на два массива - int mid = size / 2; - int left[mid]; - int right[size - mid]; - - for (int i = 0; i < mid; i++) - left[i] = data[i]; - - for (int i = mid; i < size; i++) - right[i - mid] = data[i]; - - - merge_sort(left, mid); - merge_sort(right, size - mid); - merge(left, right, data, mid, size - mid); -} \ No newline at end of file diff --git a/src/06oct25/merge_sort.s b/src/06oct25/merge_sort.s new file mode 100644 index 0000000..3a86e85 --- /dev/null +++ b/src/06oct25/merge_sort.s @@ -0,0 +1,267 @@ + .file "merge_sort.c" + .text + .p2align 4 + .globl merge + .type merge, @function +merge: +.LFB0: + .cfi_startproc + endbr64 + pushq %r12 + .cfi_def_cfa_offset 16 + .cfi_offset 12, -16 + movq %rsi, %r9 + movq %rdx, %r10 + movl %ecx, %r11d + pushq %rbp + .cfi_def_cfa_offset 24 + .cfi_offset 6, -24 + pushq %rbx + .cfi_def_cfa_offset 32 + .cfi_offset 3, -32 + movq %rdi, %rbx + testl %ecx, %ecx + jle .L12 + testl %r8d, %r8d + jle .L12 + movl $1, %ecx + xorl %esi, %esi + xorl %edi, %edi + jmp .L5 + .p2align 4,,10 + .p2align 3 +.L28: + movl %eax, %edx + addl $1, %edi + leaq 1(%rcx), %rax + movl %edx, -4(%r10,%rcx,4) + cmpl %r11d, %edi + jge .L2 +.L29: + cmpl %r8d, %esi + jge .L2 + movq %rax, %rcx +.L5: + movslq %edi, %rax + movslq %esi, %rdx + movl (%rbx,%rax,4), %eax + movl (%r9,%rdx,4), %edx + cmpl %eax, %edx + jge .L28 + movl %edx, -4(%r10,%rcx,4) + addl $1, %esi + leaq 1(%rcx), %rax + cmpl %r11d, %edi + jl .L29 +.L2: + cmpl %edi, %r11d + jle .L7 + movslq %edi, %rax + movl %r11d, %ebp + leaq (%rbx,%rax,4), %r12 + subl %edi, %ebp + movslq %ecx, %rax + leaq (%r10,%rax,4), %rbx + salq $2, %rbp + xorl %eax, %eax + .p2align 4,,10 + .p2align 3 +.L8: + movl (%r12,%rax), %edx + movl %edx, (%rbx,%rax) + addq $4, %rax + cmpq %rax, %rbp + jne .L8 + addl %ecx, %r11d + movl %r11d, %ecx + subl %edi, %ecx +.L7: + cmpl %esi, %r8d + jle .L1 + subl %esi, %r8d + movslq %esi, %rax + movslq %ecx, %rcx + leaq (%r9,%rax,4), %rsi + salq $2, %r8 + leaq (%r10,%rcx,4), %rcx + xorl %eax, %eax + .p2align 4,,10 + .p2align 3 +.L10: + movl (%rsi,%rax), %edx + movl %edx, (%rcx,%rax) + addq $4, %rax + cmpq %r8, %rax + jne .L10 +.L1: + popq %rbx + .cfi_remember_state + .cfi_def_cfa_offset 24 + popq %rbp + .cfi_def_cfa_offset 16 + popq %r12 + .cfi_def_cfa_offset 8 + ret + .p2align 4,,10 + .p2align 3 +.L12: + .cfi_restore_state + xorl %ecx, %ecx + xorl %esi, %esi + xorl %edi, %edi + jmp .L2 + .cfi_endproc +.LFE0: + .size merge, .-merge + .p2align 4 + .globl merge_sort + .type merge_sort, @function +merge_sort: +.LFB1: + .cfi_startproc + endbr64 + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + pushq %r15 + pushq %r14 + pushq %r13 + pushq %r12 + pushq %rbx + subq $56, %rsp + .cfi_offset 15, -24 + .cfi_offset 14, -32 + .cfi_offset 13, -40 + .cfi_offset 12, -48 + .cfi_offset 3, -56 + movq %fs:40, %rax + movq %rax, -56(%rbp) + xorl %eax, %eax + movq %rsp, -72(%rbp) + cmpl $1, %esi + jle .L30 + movl %esi, %r15d + movl %esi, %ecx + movq %rsp, %rsi + movq %rdi, %rbx + sarl %r15d + movslq %r15d, %r8 + salq $2, %r8 + leaq 15(%r8), %rax + movq %rax, %rdx + andq $-4096, %rax + subq %rax, %rsi + andq $-16, %rdx + cmpq %rsi, %rsp + je .L34 +.L48: + subq $4096, %rsp + orq $0, 4088(%rsp) + cmpq %rsi, %rsp + jne .L48 +.L34: + andl $4095, %edx + subq %rdx, %rsp + testq %rdx, %rdx + jne .L49 +.L35: + movl %ecx, %r13d + movq %rsp, %rsi + movq %rsp, %r14 + subl %r15d, %r13d + movslq %r13d, %rax + leaq 15(,%rax,4), %rax + movq %rax, %rdx + andq $-4096, %rax + andq $-16, %rdx + subq %rax, %rsi +.L36: + cmpq %rsi, %rsp + je .L37 + subq $4096, %rsp + orq $0, 4088(%rsp) + jmp .L36 +.L37: + andl $4095, %edx + subq %rdx, %rsp + testq %rdx, %rdx + je .L38 + orq $0, -8(%rsp,%rdx) +.L38: + movl %r15d, %edx + movq %rbx, %rsi + movq %r14, %rdi + movl %ecx, -84(%rbp) + salq $2, %rdx + movq %r8, -80(%rbp) + movq %rsp, %r12 + call memcpy@PLT + movl -84(%rbp), %ecx + cmpl %r15d, %ecx + jle .L39 + movq -80(%rbp), %r8 + subl $1, %ecx + movq %r12, %rdi + subl %r15d, %ecx + leaq 4(,%rcx,4), %rdx + leaq (%rbx,%r8), %rsi + call memcpy@PLT +.L39: + movl %r15d, %esi + movq %r14, %rdi + call merge_sort + movl %r13d, %esi + movq %r12, %rdi + call merge_sort + movl %r13d, %r8d + movl %r15d, %ecx + movq %rbx, %rdx + movq %r12, %rsi + movq %r14, %rdi + call merge + movq -72(%rbp), %rsp +.L30: + movq -56(%rbp), %rax + subq %fs:40, %rax + jne .L50 + leaq -40(%rbp), %rsp + popq %rbx + popq %r12 + popq %r13 + popq %r14 + popq %r15 + popq %rbp + .cfi_remember_state + .cfi_def_cfa 7, 8 + ret + .p2align 4,,10 + .p2align 3 +.L49: + .cfi_restore_state + orq $0, -8(%rsp,%rdx) + jmp .L35 +.L50: + call __stack_chk_fail@PLT + .cfi_endproc +.LFE1: + .size merge_sort, .-merge_sort + .ident "GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0" + .section .note.GNU-stack,"",@progbits + .section .note.gnu.property,"a" + .align 8 + .long 1f - 0f + .long 4f - 1f + .long 5 +0: + .string "GNU" +1: + .align 8 + .long 0xc0000002 + .long 3f - 2f +2: + .long 0x3 +3: + .align 8 +4: From 711d444e9f506886d547b762219475b6bda95812 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Thu, 23 Oct 2025 20:12:04 +0300 Subject: [PATCH 6/9] Create build instruction --- src/06oct25/build.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/06oct25/build.md diff --git a/src/06oct25/build.md b/src/06oct25/build.md new file mode 100644 index 0000000..e69de29 From 7f123d4895d4f534d31c4a5a15d786b1b53988f9 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 03:15:21 +0300 Subject: [PATCH 7/9] Build instruction --- src/06oct25/build.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/06oct25/build.md b/src/06oct25/build.md index e69de29..cecd5b2 100644 --- a/src/06oct25/build.md +++ b/src/06oct25/build.md @@ -0,0 +1,3 @@ +cd src/06oct25 +gcc -Wall -Wextra -O2 merge_sort.c -S +gcc -Wall -Wextra -O2 merge_sort.s main.c -o main \ No newline at end of file From 953eaac39957161981b9a4b1eea8177803208e1e Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 03:17:14 +0300 Subject: [PATCH 8/9] Update merge sort module --- src/06oct25/merge_sort.c | 42 +++++ src/06oct25/merge_sort.s | 359 +++++++++++++++------------------------ 2 files changed, 181 insertions(+), 220 deletions(-) create mode 100644 src/06oct25/merge_sort.c diff --git a/src/06oct25/merge_sort.c b/src/06oct25/merge_sort.c new file mode 100644 index 0000000..d62a3a2 --- /dev/null +++ b/src/06oct25/merge_sort.c @@ -0,0 +1,42 @@ +#include "merge_sort.h" +#include +#include + +static void merge(int data[], int leftSize, int rightSize) +{ + int size = leftSize + rightSize; + int* buffer = malloc((size_t)size * sizeof(int)); + int i = 0; + int j = 0; + int k = 0; + int* left = data; + int* right = data + leftSize; + + while (i < leftSize && j < rightSize) { + if (left[i] <= right[j]) { + buffer[k++] = left[i++]; + } else { + buffer[k++] = right[j++]; + } + } + + while (i < leftSize) + buffer[k++] = left[i++]; + + while (j < rightSize) + buffer[k++] = right[j++]; + + memcpy(data, buffer, (size_t)size * sizeof(int)); + free(buffer); +} + +void mergeSort(int data[], int size) +{ + if (size < 2) + return; + + int mid = size / 2; + mergeSort(data, mid); + mergeSort(data + mid, size - mid); + merge(data, mid, size - mid); +} diff --git a/src/06oct25/merge_sort.s b/src/06oct25/merge_sort.s index 3a86e85..9443e30 100644 --- a/src/06oct25/merge_sort.s +++ b/src/06oct25/merge_sort.s @@ -1,252 +1,171 @@ .file "merge_sort.c" .text .p2align 4 - .globl merge - .type merge, @function -merge: -.LFB0: + .globl mergeSort + .type mergeSort, @function +mergeSort: +.LFB31: .cfi_startproc endbr64 - pushq %r12 - .cfi_def_cfa_offset 16 - .cfi_offset 12, -16 - movq %rsi, %r9 - movq %rdx, %r10 - movl %ecx, %r11d - pushq %rbp - .cfi_def_cfa_offset 24 - .cfi_offset 6, -24 - pushq %rbx - .cfi_def_cfa_offset 32 - .cfi_offset 3, -32 - movq %rdi, %rbx - testl %ecx, %ecx - jle .L12 - testl %r8d, %r8d - jle .L12 - movl $1, %ecx - xorl %esi, %esi - xorl %edi, %edi - jmp .L5 - .p2align 4,,10 - .p2align 3 -.L28: - movl %eax, %edx - addl $1, %edi - leaq 1(%rcx), %rax - movl %edx, -4(%r10,%rcx,4) - cmpl %r11d, %edi - jge .L2 -.L29: - cmpl %r8d, %esi - jge .L2 - movq %rax, %rcx -.L5: - movslq %edi, %rax - movslq %esi, %rdx - movl (%rbx,%rax,4), %eax - movl (%r9,%rdx,4), %edx - cmpl %eax, %edx - jge .L28 - movl %edx, -4(%r10,%rcx,4) - addl $1, %esi - leaq 1(%rcx), %rax - cmpl %r11d, %edi - jl .L29 -.L2: - cmpl %edi, %r11d - jle .L7 - movslq %edi, %rax - movl %r11d, %ebp - leaq (%rbx,%rax,4), %r12 - subl %edi, %ebp - movslq %ecx, %rax - leaq (%r10,%rax,4), %rbx - salq $2, %rbp - xorl %eax, %eax - .p2align 4,,10 - .p2align 3 -.L8: - movl (%r12,%rax), %edx - movl %edx, (%rbx,%rax) - addq $4, %rax - cmpq %rax, %rbp - jne .L8 - addl %ecx, %r11d - movl %r11d, %ecx - subl %edi, %ecx -.L7: - cmpl %esi, %r8d - jle .L1 - subl %esi, %r8d - movslq %esi, %rax - movslq %ecx, %rcx - leaq (%r9,%rax,4), %rsi - salq $2, %r8 - leaq (%r10,%rcx,4), %rcx - xorl %eax, %eax - .p2align 4,,10 - .p2align 3 -.L10: - movl (%rsi,%rax), %edx - movl %edx, (%rcx,%rax) - addq $4, %rax - cmpq %r8, %rax - jne .L10 -.L1: - popq %rbx - .cfi_remember_state - .cfi_def_cfa_offset 24 - popq %rbp - .cfi_def_cfa_offset 16 - popq %r12 - .cfi_def_cfa_offset 8 - ret - .p2align 4,,10 - .p2align 3 -.L12: - .cfi_restore_state - xorl %ecx, %ecx - xorl %esi, %esi - xorl %edi, %edi - jmp .L2 - .cfi_endproc -.LFE0: - .size merge, .-merge - .p2align 4 - .globl merge_sort - .type merge_sort, @function -merge_sort: -.LFB1: - .cfi_startproc - endbr64 - pushq %rbp - .cfi_def_cfa_offset 16 - .cfi_offset 6, -16 - movq %rsp, %rbp - .cfi_def_cfa_register 6 pushq %r15 + .cfi_def_cfa_offset 16 + .cfi_offset 15, -16 pushq %r14 + .cfi_def_cfa_offset 24 + .cfi_offset 14, -24 pushq %r13 + .cfi_def_cfa_offset 32 + .cfi_offset 13, -32 pushq %r12 + .cfi_def_cfa_offset 40 + .cfi_offset 12, -40 + movslq %esi, %r12 + pushq %rbp + .cfi_def_cfa_offset 48 + .cfi_offset 6, -48 pushq %rbx - subq $56, %rsp - .cfi_offset 15, -24 - .cfi_offset 14, -32 - .cfi_offset 13, -40 - .cfi_offset 12, -48 + .cfi_def_cfa_offset 56 .cfi_offset 3, -56 - movq %fs:40, %rax - movq %rax, -56(%rbp) - xorl %eax, %eax - movq %rsp, -72(%rbp) - cmpl $1, %esi - jle .L30 - movl %esi, %r15d - movl %esi, %ecx - movq %rsp, %rsi - movq %rdi, %rbx + subq $40, %rsp + .cfi_def_cfa_offset 96 + cmpl $1, %r12d + jle .L1 + movl %r12d, %r15d + movq %rdi, %r14 sarl %r15d - movslq %r15d, %r8 - salq $2, %r8 - leaq 15(%r8), %rax + movl %r15d, %esi + call mergeSort + movslq %r15d, %rax + movl %r12d, %r9d + subl %r15d, %r9d + leaq (%r14,%rax,4), %r8 + movq %r8, %rdi + movl %r9d, %esi + movl %r9d, 24(%rsp) + movq %r8, 16(%rsp) + call mergeSort + leaq 0(,%r12,4), %rax + movq %rax, %rdi + movq %rax, 8(%rsp) + call malloc@PLT + movl 24(%rsp), %r9d + movq 16(%rsp), %r8 + movq %rax, %r12 + testl %r9d, %r9d + je .L11 + movl $1, %edx + xorl %ebp, %ebp + xorl %r13d, %r13d + jmp .L6 + .p2align 4,,10 + .p2align 3 +.L19: + movl %esi, %eax + addl $1, %r13d + movl %eax, -4(%r12,%rdx,4) + leaq 1(%rdx), %rax + cmpl %r13d, %r15d + jle .L13 +.L20: + cmpl %ebp, %r9d + jle .L13 movq %rax, %rdx - andq $-4096, %rax - subq %rax, %rsi - andq $-16, %rdx - cmpq %rsi, %rsp - je .L34 -.L48: - subq $4096, %rsp - orq $0, 4088(%rsp) - cmpq %rsi, %rsp - jne .L48 -.L34: - andl $4095, %edx - subq %rdx, %rsp - testq %rdx, %rdx - jne .L49 -.L35: - movl %ecx, %r13d - movq %rsp, %rsi - movq %rsp, %r14 - subl %r15d, %r13d +.L6: movslq %r13d, %rax - leaq 15(,%rax,4), %rax - movq %rax, %rdx - andq $-4096, %rax - andq $-16, %rdx - subq %rax, %rsi -.L36: - cmpq %rsi, %rsp - je .L37 - subq $4096, %rsp - orq $0, 4088(%rsp) - jmp .L36 -.L37: - andl $4095, %edx - subq %rdx, %rsp - testq %rdx, %rdx - je .L38 - orq $0, -8(%rsp,%rdx) -.L38: - movl %r15d, %edx - movq %rbx, %rsi - movq %r14, %rdi - movl %ecx, -84(%rbp) - salq $2, %rdx - movq %r8, -80(%rbp) - movq %rsp, %r12 + movl (%r14,%rax,4), %esi + movslq %ebp, %rax + movl (%r8,%rax,4), %eax + cmpl %eax, %esi + jle .L19 + movl %eax, -4(%r12,%rdx,4) + addl $1, %ebp + leaq 1(%rdx), %rax + cmpl %r13d, %r15d + jg .L20 +.L13: + movl %edx, %ebx + cmpl %r13d, %r15d + jle .L8 +.L3: + movslq %ebx, %rax + movq %r8, 24(%rsp) + leaq (%r12,%rax,4), %rdi + leal -1(%r15), %eax + addl %ebx, %r15d + movl %r9d, 16(%rsp) + subl %r13d, %eax + movl %r15d, %ebx + leaq 4(,%rax,4), %rdx + movslq %r13d, %rax + subl %r13d, %ebx + leaq (%r14,%rax,4), %rsi call memcpy@PLT - movl -84(%rbp), %ecx - cmpl %r15d, %ecx - jle .L39 - movq -80(%rbp), %r8 - subl $1, %ecx - movq %r12, %rdi - subl %r15d, %ecx - leaq 4(,%rcx,4), %rdx - leaq (%rbx,%r8), %rsi + movq 24(%rsp), %r8 + movl 16(%rsp), %r9d +.L8: + cmpl %ebp, %r9d + jle .L10 + subl $1, %r9d + movslq %ebx, %rdx + movslq %ebp, %rax + subl %ebp, %r9d + leaq (%r12,%rdx,4), %rdi + leaq (%r8,%rax,4), %rsi + leaq 4(,%r9,4), %rdx call memcpy@PLT -.L39: - movl %r15d, %esi +.L10: + movq 8(%rsp), %rdx movq %r14, %rdi - call merge_sort - movl %r13d, %esi - movq %r12, %rdi - call merge_sort - movl %r13d, %r8d - movl %r15d, %ecx - movq %rbx, %rdx movq %r12, %rsi - movq %r14, %rdi - call merge - movq -72(%rbp), %rsp -.L30: - movq -56(%rbp), %rax - subq %fs:40, %rax - jne .L50 - leaq -40(%rbp), %rsp + call memcpy@PLT + addq $40, %rsp + .cfi_remember_state + .cfi_def_cfa_offset 56 + movq %r12, %rdi popq %rbx + .cfi_def_cfa_offset 48 + popq %rbp + .cfi_def_cfa_offset 40 popq %r12 + .cfi_def_cfa_offset 32 popq %r13 + .cfi_def_cfa_offset 24 popq %r14 + .cfi_def_cfa_offset 16 popq %r15 - popq %rbp + .cfi_def_cfa_offset 8 + jmp free@PLT + .p2align 4,,10 + .p2align 3 +.L1: + .cfi_restore_state + addq $40, %rsp .cfi_remember_state - .cfi_def_cfa 7, 8 + .cfi_def_cfa_offset 56 + popq %rbx + .cfi_def_cfa_offset 48 + popq %rbp + .cfi_def_cfa_offset 40 + popq %r12 + .cfi_def_cfa_offset 32 + popq %r13 + .cfi_def_cfa_offset 24 + popq %r14 + .cfi_def_cfa_offset 16 + popq %r15 + .cfi_def_cfa_offset 8 ret .p2align 4,,10 .p2align 3 -.L49: +.L11: .cfi_restore_state - orq $0, -8(%rsp,%rdx) - jmp .L35 -.L50: - call __stack_chk_fail@PLT + xorl %ebx, %ebx + xorl %ebp, %ebp + xorl %r13d, %r13d + jmp .L3 .cfi_endproc -.LFE1: - .size merge_sort, .-merge_sort +.LFE31: + .size mergeSort, .-mergeSort .ident "GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0" .section .note.GNU-stack,"",@progbits .section .note.gnu.property,"a" From 0eb23aeb624466ea2bc1edd6cd106ab6710565e6 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 03:18:44 +0300 Subject: [PATCH 9/9] Fix styleguide violations --- src/06oct25/main.c | 19 ++++++++++--------- src/06oct25/merge_sort.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/06oct25/main.c b/src/06oct25/main.c index 8c3082d..2369b67 100644 --- a/src/06oct25/main.c +++ b/src/06oct25/main.c @@ -3,20 +3,21 @@ int main(void) { - int number; - int data[100]; - int original_data[100]; + int number = 0; + int data[100] = { 0 }; + int originalData[100] = { 0 }; int index = 0; printf("введите числа (для завершения нажмите enter+ctrl+d):\n"); while (scanf("%d", &number) == 1) { data[index] = number; - original_data[index] = number; // сохраняем копию исходного массива + // сохраняем копию исходного массива + originalData[index] = number; index++; }; - merge_sort(data, index); + mergeSort(data, index); printf("отсортированные числа:\n"); for (int i = 0; i < index; i++) @@ -24,12 +25,12 @@ int main(void) printf("\n"); // подсчитываем различия - int moved_count = 0; + int movedCount = 0; for (int i = 0; i < index; i++) { - if (data[i] != original_data[i]) { - moved_count++; + if (data[i] != originalData[i]) { + movedCount++; } } - return moved_count; + return movedCount; } \ No newline at end of file diff --git a/src/06oct25/merge_sort.h b/src/06oct25/merge_sort.h index 6181fef..05ef7ec 100644 --- a/src/06oct25/merge_sort.h +++ b/src/06oct25/merge_sort.h @@ -1,4 +1,4 @@ #pragma once /* Сортировка слиянием */ -void merge_sort(int data[], int size); \ No newline at end of file +void mergeSort(int data[], int size); \ No newline at end of file