Сортировка пузырьком
Все вопросы можно задавать по адресу staroverovvl@yandex.ru
В качестве программы, работающей с массивом, приведем пример программы,
реализующей сортировку пузырьком массива целых чисел.
Сдаваемая программа должна состоять, как минимум, их трех файлов:
- С-файла с функцией, собственно решающей задачу,
- С-файла с функцией main, вызывающей функцию, решающую задачу,
- include-файла с описанием функций, созданных в программе. Созданный include-файл должен быть включен во все C-файлы программы.
Отметим, что ввод массива из файла должен быть оформлен в виде отдельной функции.
Далее содержится пример файлов программы, решающей поставленную задачу.
include-файл с именем fun.h:
void SortB(int *m, int n);
int InputArray(const char *FileName, int **m, int *n);
Файл с функцией сортировки SortB и функцией ввода массива из файла InputArray. Пусть файл имеет имя fun.c:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include "fun.h"
//следует задуматься о том, что будет с программой
//если в операторе define не написать фигурные скобки
#define SWAP(a,b,t) {(t)=(a);(a)=(b);(b)=(t);}
void SortB(int *m, int n)
{int i,j,t;
for(i=0;i<n;i++)
for(j=1;j<n;j++)
if(m[j-1]>m[j])
SWAP(m[j-1],m[j],t);
}
int InputArray(const char *FileName, int **m, int *n)
{int I,t,err=0;FILE *f;
*m=NULL;*n=0;
for(I=0;I<2;I++)
{
if(I==1&&*n>0)
*m=(int*)malloc(*n*sizeof(int));
*n=0;
f=fopen(FileName,"r");
if(f)
{
for(*n=0;fscanf(f,"%d",(I==0?&t:(*m)+(*n)))==1;(*n)++);
}else {err=-1;break;}
fclose(f);
}
return err;
}
Файл с функцией main с именем main.c:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include "fun.h"
int main(void)
{
int err=0,i,*m=NULL,n=0;
err=InputArray("data.txt",&m,&n);
if(err==-1)
printf("Can't open file!!!\n");
else if(err==0&&n==0)
printf("File is empty!!!\n");
else if(err!=0)
printf("Error!!!\n");
if(err==0)
SortB(m,n);
for(i=0;i<n;i++)printf("m[%d]=%d\n",i,m[i]);
getchar();//данная функция нужна только для предотвращения
//немедленного закрытия программы после запуска из среды
return err;//правилом хорошего тона является наличие только одного оператора return в функции
}
Файл data.txt должен быть создан в той же папке, что и файлы программы. В нем должны быть записаны числа
массива через пробел, или по одному в строке.