Сделал 9 Задание на сортировку
This commit is contained in:
parent
a1a35972d4
commit
a83a31c034
4 changed files with 142 additions and 0 deletions
96
Sorting/9Ex/main.c
Normal file
96
Sorting/9Ex/main.c
Normal file
|
@ -0,0 +1,96 @@
|
|||
#include <stdio.h>
|
||||
#include "seagwithsob.h"
|
||||
|
||||
int main() {
|
||||
// Тест 1: Набор чисел в обычном порядке
|
||||
double array1[] = {10.0, 9.00001, 8.0001, 7.001, 6.01, 5.1};
|
||||
int length1 = sizeof(array1) / sizeof(array1[0]);
|
||||
|
||||
printf("Test 1 - Original array:\n");
|
||||
for (int i = 0; i < length1; i++) {
|
||||
printf("%lf ", array1[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
sort(array1, length1);
|
||||
|
||||
printf("Test 1 - Sorted array:\n");
|
||||
for (int i = 0; i < length1; i++) {
|
||||
printf("%lf ", array1[i]);
|
||||
}
|
||||
printf("\n\n");
|
||||
|
||||
// Тест 2: Все числа одинаковые
|
||||
double array2[] = {1.0, 1.0, 1.0, 1.0};
|
||||
int length2 = sizeof(array2) / sizeof(array2[0]);
|
||||
|
||||
printf("Test 2 - Original array:\n");
|
||||
for (int i = 0; i < length2; i++) {
|
||||
printf("%lf ", array2[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
sort(array2, length2);
|
||||
|
||||
printf("Test 2 - Sorted array:\n");
|
||||
for (int i = 0; i < length2; i++) {
|
||||
printf("%lf ", array2[i]);
|
||||
}
|
||||
printf("\n\n");
|
||||
|
||||
// Тест 3: Набор чисел с отрицательными значениями
|
||||
double array3[] = {-3.0, -1.5, -7.2, 2.1, 0.0};
|
||||
int length3 = sizeof(array3) / sizeof(array3[0]);
|
||||
|
||||
printf("Test 3 - Original array:\n");
|
||||
for (int i = 0; i < length3; i++) {
|
||||
printf("%lf ", array3[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
sort(array3, length3);
|
||||
|
||||
printf("Test 3 - Sorted array:\n");
|
||||
for (int i = 0; i < length3; i++) {
|
||||
printf("%lf ", array3[i]);
|
||||
}
|
||||
printf("\n\n");
|
||||
|
||||
// Тест 4: Набор чисел с разной экспонентой
|
||||
double array4[] = {1e-10, 1e+10, 1.0, 1e-5, 1e+5};
|
||||
int length4 = sizeof(array4) / sizeof(array4[0]);
|
||||
|
||||
printf("Test 4 - Original array:\n");
|
||||
for (int i = 0; i < length4; i++) {
|
||||
printf("%e ", array4[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
sort(array4, length4);
|
||||
|
||||
printf("Test 4 - Sorted array:\n");
|
||||
for (int i = 0; i < length4; i++) {
|
||||
printf("%e ", array4[i]);
|
||||
}
|
||||
printf("\n\n");
|
||||
|
||||
// Тест 5: Граничные значения (минимальное и максимальное double)
|
||||
double array5[] = {1e-308, 1e+308, 0.0, -1e-308, -1e+308};
|
||||
int length5 = sizeof(array5) / sizeof(array5[0]);
|
||||
|
||||
printf("Test 5 - Original array:\n");
|
||||
for (int i = 0; i < length5; i++) {
|
||||
printf("%e ", array5[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
sort(array5, length5);
|
||||
|
||||
printf("Test 5 - Sorted array:\n");
|
||||
for (int i = 0; i < length5; i++) {
|
||||
printf("%e ", array5[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
return 0;
|
||||
}
|
4
Sorting/9Ex/makefile
Normal file
4
Sorting/9Ex/makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
all:
|
||||
gcc -c main.c seagwithsob.c
|
||||
gcc main.o seagwithsob.o && del *.o
|
||||
a.exe
|
33
Sorting/9Ex/seagwithsob.c
Normal file
33
Sorting/9Ex/seagwithsob.c
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include "seagwithsob.h"
|
||||
|
||||
void sort(double * array, int length) {
|
||||
double zero[length];
|
||||
double unit[length];
|
||||
int index;
|
||||
|
||||
for (int j = 0; j < 63; ++j) {
|
||||
index = 0;
|
||||
|
||||
for (int i = 0; i < length; ++i) {
|
||||
if ((*(unsigned long long*)&array[i] >> j) & 1) unit[index++] = array[i];
|
||||
else zero[i - index] = array[i];
|
||||
}
|
||||
|
||||
rewrite(array, zero, length - index, unit, index);
|
||||
}
|
||||
|
||||
index = 0;
|
||||
|
||||
for (int i = 0; i < length; ++i) {
|
||||
if ((*(unsigned long long*)&array[i] >> 63) & 1) unit[index++] = array[i];
|
||||
else zero[i - index] = array[i];
|
||||
}
|
||||
|
||||
for (int i = 0; i < index; ++i) array[i] = unit[index - i - 1];
|
||||
for (int i = index; i < length; ++i) array[i] = zero[i - index];
|
||||
}
|
||||
|
||||
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit) {
|
||||
for (int i = 0; i < len_zero; ++i) array[i] = zero[i];
|
||||
for (int i = len_zero; i < len_zero + len_unit; ++i) array[i] = unit[i - len_zero];
|
||||
}
|
9
Sorting/9Ex/seagwithsob.h
Normal file
9
Sorting/9Ex/seagwithsob.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef SEAGWITHSOB
|
||||
#define SEAGWITHSOB
|
||||
|
||||
#include <string.h>
|
||||
|
||||
void sort(double * array, int length);
|
||||
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit);
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue