Сделал Сортировку
This commit is contained in:
parent
a83a31c034
commit
0d98154944
8 changed files with 152 additions and 94 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*.un~
|
||||
*.exe
|
||||
*~
|
1
Sorting/9Ex/input.txt
Normal file
1
Sorting/9Ex/input.txt
Normal file
|
@ -0,0 +1 @@
|
|||
6 5 4 3 2 1
|
|
@ -1,96 +1,25 @@
|
|||
#include <stdio.h>
|
||||
#include "seagwithsob.h"
|
||||
#include "tools.h"
|
||||
#include <stdlib.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]);
|
||||
int main() {
|
||||
FILE * file = getFile();
|
||||
double * array;
|
||||
int length;
|
||||
|
||||
if (file == NULL) return -1;
|
||||
array = getArray(file);
|
||||
if (array == NULL) return -2;
|
||||
length = (int)array[0];
|
||||
|
||||
printf("Test 1 - Original array:\n");
|
||||
for (int i = 0; i < length1; i++) {
|
||||
printf("%lf ", array1[i]);
|
||||
}
|
||||
printf("\n");
|
||||
array = &array[1];
|
||||
printArray(array, length);
|
||||
sort(array, length);
|
||||
printArray(array, length);
|
||||
|
||||
sort(array1, length1);
|
||||
printf("\n");
|
||||
randomArray();
|
||||
|
||||
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;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
all:
|
||||
gcc -c main.c seagwithsob.c
|
||||
gcc main.o seagwithsob.o && del *.o
|
||||
a.exe
|
||||
all: main.o seagwithsob.o tools.o
|
||||
gcc main.o seagwithsob.o tools.o && del *.o
|
||||
a.exe
|
||||
|
||||
main.o: main.c
|
||||
gcc -c main.c
|
||||
|
||||
seagwithsob.o: seagwithsob.c
|
||||
gcc -c seagwithsob.c
|
||||
|
||||
tools.o: tools.c
|
||||
gcc -c tools.c
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
void sort(double * array, int length) {
|
||||
double zero[length];
|
||||
double unit[length];
|
||||
int index;
|
||||
int index, timer = -clock();
|
||||
|
||||
for (int j = 0; j < 63; ++j) {
|
||||
index = 0;
|
||||
|
@ -25,6 +25,9 @@ void sort(double * array, int length) {
|
|||
|
||||
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];
|
||||
|
||||
timer += clock();
|
||||
printf("Required time for sorting is %lf seconds\n", (double)timer / CLOCKS_PER_SEC);
|
||||
}
|
||||
|
||||
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit) {
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#define SEAGWITHSOB
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
void sort(double * array, int length);
|
||||
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit);
|
||||
|
|
92
Sorting/9Ex/tools.c
Normal file
92
Sorting/9Ex/tools.c
Normal file
|
@ -0,0 +1,92 @@
|
|||
#include "tools.h"
|
||||
|
||||
FILE * getFile() {
|
||||
char filename[50];
|
||||
|
||||
printf("Enter file name: ");
|
||||
if (scanf("%s", &filename) == 1) {
|
||||
FILE * file = fopen(filename, "r");
|
||||
if (file == NULL) {
|
||||
printf("Error file!\n)");
|
||||
return NULL;
|
||||
} else {
|
||||
return file;
|
||||
}
|
||||
} else {
|
||||
printf("Empty name!\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
double * getArray(FILE * file) {
|
||||
char filename[50];
|
||||
int i, size = 2;
|
||||
double * array = NULL;
|
||||
double current;
|
||||
|
||||
if (fscanf(file, "%lf", ¤t) != 1) {
|
||||
printf("File if empty!");
|
||||
return array;
|
||||
}
|
||||
|
||||
array = (double *)malloc(size * sizeof(double));
|
||||
|
||||
i = 1;
|
||||
do {
|
||||
if (i >= size) {
|
||||
size *= 2;
|
||||
array = (double *)realloc(array, sizeof(double) * size);
|
||||
}
|
||||
array[i] = current;
|
||||
++i;
|
||||
} while (fscanf(file, "%lf", ¤t) == 1);
|
||||
|
||||
array = (double *)realloc(array, sizeof(double) * i);
|
||||
array[0] = (double)i;
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
|
||||
bool orderliness(double * array, int length) {
|
||||
for (int i = 1; i < length; ++i) if ((array[i] - array[i - 1]) < exp) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void randomArray() {
|
||||
int length;
|
||||
|
||||
printf("Enter length of array: ");
|
||||
if (scanf("%d", &length) == 1) {
|
||||
double * array = (double *)malloc(length * sizeof(double));
|
||||
generate(array, length);
|
||||
printArray(array, length);
|
||||
printf("\n");
|
||||
sort(array, length);
|
||||
printf("\n");
|
||||
printArray(array, length);
|
||||
} else {
|
||||
printf("Length not entered!\n");
|
||||
}
|
||||
}
|
||||
|
||||
void generate(double * array, int length) {
|
||||
srand(time(NULL));
|
||||
|
||||
for (int i = 0; i < length; ++i) {
|
||||
array[i] = 1.*rand() / (1. + rand()) * 1000;
|
||||
}
|
||||
}
|
||||
|
||||
void printArray(double * array, int length) {
|
||||
length = (length > 10) ? 10 : length;
|
||||
|
||||
for (int i = 0; i < length; ++i) {
|
||||
printf("%.2lf ", array[i]);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
|
||||
}
|
||||
|
||||
|
20
Sorting/9Ex/tools.h
Normal file
20
Sorting/9Ex/tools.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef TOOLS
|
||||
#define TOOLS
|
||||
|
||||
#include "seagwithsob.h"
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#define exp -1.e-6
|
||||
|
||||
FILE * getFile();
|
||||
double * getArray(FILE * file);
|
||||
bool orderliness(double * array, int length);
|
||||
void randomArray();
|
||||
void generate(double * array, int length);
|
||||
void printArray(double * array, int length);
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue