Реализации различных алгоритмов на Си / Метод подсчета (int)
.doc
Задание кафедры
Написать программу, осуществляющую сортировку переменных из входного
файла и записывающую результат в выходной файл. Имена входного и выходного файлов вводятся пользователем. На экране должны отображаться исходная и сортированная последовательности. Формат файлов текстовой, кол-во записей в файле неограниченно.
Вариант: 2i
2-метод подсчета
i-целые
Блок схема алгоритма сортировки
B[i]
++ B[i]
++
B[i]
++
B[i] ++
B[i] ++
#include<stdio.h>
#include<conio.h>
int read(char*name);
int write(char*name);
void sort();
void print();
int *arr,*sortarr;
int n;
main()
{
char f1[256],f2[256];
int res;
printf("Input source file name:");
scanf("%s",f1);
printf("Input destination file name:");
scanf("%s",f2);
res = read(f1);
if (res)
{
printf("Error reading file.");
getch();
return 0;
}
print();
sort();
print();
res = write(f2);
if (res)
{
printf("Error writing file.");
getch();
return 0;
}
getch();
delete arr;
return 0;
}
int read(char*name)
{
FILE*f;
int tmp,i;
f = fopen(name,"rt");
if (f == NULL) return 1;
// count
for(i=0; ;i++)
{
if (feof(f)) break;
fscanf(f,"%d",&tmp);
}
n=i;
arr = new int [n];
fclose(f);
// read
f= fopen(name,"rt");
if (f == NULL) return 1;
for(i=0;i<n ;i++)
{
fscanf(f,"%d",&arr[i]);
}
fclose(f);
return 0;
}
int write(char*name)
{
int i;
FILE *f;
f=fopen(name,"wt");
if (f == NULL) return 1;
for(i=0;i<n;i++)
{
fprintf(f,"%d ",arr[i]);
}
fclose(f);
return 0;
}
void sort()
{
int i,j,*B;
sortarr = new int [n];
B = new int [n];
for(i=0;i<n;i++) B[i]=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(arr[i]>arr[j]) B[i]++;
}
}
printf("\n");
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]==arr[j]) B[i]++;
}
}
for(i=0;i<n;i++)
{
sortarr[B[i]]=arr[i];
}
for(i=0;i<n;i++)
{
arr[i]=sortarr[i];
}
delete B,sortarr;
}
void print()
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
}