Реализации различных алгоритмов на Си / Метод встава (int)
.docЗАДАНИЕ КАФЕДРЫ
Написать программу, осуществляющую сортировку целых чисел методом подсчета из входного файла и записывающую результат в выходной файл. На экране должна отображаться исходная и отсортированная последовательности. Формат файла – текстовый. Количество записей в файле не ограничено. Вариант: 4i (Метод встава целых чисел)
Текст программы:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void sort(int a[],int b[], int k);
int main(void)
{
int i,n=0,*m,*sm;
FILE *inp,*out;
if((inp=fopen("1.txt","r"))==NULL)
{
system ("echo Нельзя открыть файл с элементами");
system ("pause");
return 0;
}
while(feof(inp)==0)
{
fscanf(inp,"%d",&i);
n++;
}
fclose(inp);
m=new int[n];
sm=new int[n];
fopen("1.txt","r");
clrscr();
system ("echo Количество элементов");
printf("n=%d\n\r",n);
system ("echo Исходная последовательность");
for(i=0;i<n;i++){
fscanf(inp,"%d",&m[i]);
printf(" %d ",m[i]);
}
sort(m,sm,n);
fclose(inp);
out=fopen("2.txt","w");
printf ("\n");
system("echo Отсортированная последовательность");
for(i=0;i<n;i++){
printf(" %d ",sm[i]);
fprintf(out," %d ",sm[i]);
}
delete []m;
delete []sm;
fclose(out);
getch();
}
void sort (int a[],int b[],int k)
{
int nov,j;
b[0]=a[0];
for (int p=1;p<k;p++)
{
nov=a[p];
j=p-1;
if(b[j]<nov)b[j+1]=nov;
while(b[j]>nov&&j>=0)
{
b[j+1]=b[j];
j--;
}
b[j+1]=nov;
}
}
Пример программы:
a[0]=b[0]
p=1
nov=a[p]
j=p-i
b[j+i]=nov b[j+i]=nov
b[j+i]=b[i] j=j-1
p=p+1 b[j+i]=nov