Сортировки в файле (метод сортировки выбирается пользователем) - C (СИ)
Формулировка задачи:
помогите пожалуйста соединить 3 сортировки , что бы они проходили в файле. и перед началом можно было выбрать каким способом будет сортировка. например 1- первый способ, 2-второй способ, 3- третий способ.
void selectSort(int* arr, int size)
{
int tmp, i, j, pos;
for(i = 0; i < size; ++i) // i - номер текущего шага
{
pos = i;
tmp = arr[i];
for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
{
if (arr[j] < tmp)
{
pos = j;
tmp = arr[j];
}
}
arr[pos] = arr[i];
arr[i] = tmp; // меняем местами наименьший с a[i]
}
}void selectSort(int* arr, int size)
{
int tmp, i, j, pos;
for(i = 0; i < size; ++i) // i - номер текущего шага
{
pos = i;
tmp = arr[i];
for(j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
{
if (arr[j] < tmp)
{
pos = j;
tmp = arr[j];
}
}
arr[pos] = arr[i];
arr[i] = tmp; // меняем местами наименьший с a[i]
}
} ---сортировка выбором
void bubbleSort(int* arr, int size)
{
int tmp, i, j;
for(i = 0; i < size - 1; ++i) // i - номер прохода
{
for(j = 0; j < size - 1; ++j) // внутренний цикл прохода
{
if (arr[j + 1] < arr[j])
{
tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
}----сортировка пузырьком
void insertSort(int* a, int size)
{
int i, j, tmp;
for (i = 1; i < size; ++i) // цикл проходов, i - номер прохода
{
tmp = a[i];
for (j = i - 1; j >= 0 && a[j] > tmp; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}
}----сортировка вставкамиРешение задачи: «Сортировки в файле (метод сортировки выбирается пользователем)»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//enum sorts {SELECTION_SORT
// , BUBBLE_SORT
// , INSERTION_SORT};
void print_arr(int *arr, size_t size)
{
for (size_t i = 0; i<size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main(int argc, char **argv)
{
int *arr = NULL;
int sortNo;
FILE *file;
if (argc < 3) {
printf("Error argument file name\n");
return -1;
}
file = fopen(argv[1], "r");
if (file == 0) {
printf("Error open file: %s\n", argv[1]);
return -1;
}
int size = 0, val = 0;
while (fscanf(file, "%d", &val)==1) {
arr = realloc((!size) ? NULL : arr, sizeof(int) *(size + 1));
if (arr == NULL) {
printf("Error realloc\n");
return -1;
}
arr[size++] = val;
}
fclose(file);
print_arr(arr, size);
printf("Input number[0-2]: ");
scanf("%d", &sortNo);
switch(sortNo) {
case 0:
//selection_sort(arr, size); // сюда вашу функцию сортировки
break;
case 1:
//bubble_sort(arr, size); // и сюда
break;
case 2:
//insertion_sort(arr, size); // и сюда
break;
default:
puts("Error!\n");
break;
}
file = fopen(argv[2], "w");
if (file == 0) {
printf("Error open file: %s\n", argv[2]);
return -1;
}
for (int i = 0; i<size; i++)
fprintf(file, "%d ", arr[i]);
fclose(file);
free(arr);
return 0;
}