автоматная программа сортировки слиянием
Добавлено: 04 апр 2013, 11:09
Добрый день! нужно реализовать автоматную программу сортировки слиянием.
у меня реализован на данный момент только рекурсивный метод, не подскажите как его можно переделать в автомат
у меня реализован на данный момент только рекурсивный метод, не подскажите как его можно переделать в автомат
Код: Выделить всё
void merge(int *A, int l, int s, int r)
{
//слияние упорядоченных частей массива
int pos1=l;
int pos2=s+1;
int pos3=0;
int *B;
B=(int*)calloc((r-l+1), sizeof(int));
//идет слияние, пока есть хоть один элемент в каждой последовательности
while(pos1<=s && pos2<=r)
{
if(A[pos1]<A[pos2]) B[pos3++]=A[pos1++];
else B[pos3++]=A[pos2++];
}
//одна последовательность закончилась
while(pos2<=r)
B[pos3++]=A[pos2++];
while(pos1<=s)
B[pos3++]=A[pos1++];
//скопировать B в A
for(pos3=0; pos3<r-l+1; pos3++)
A[l+pos3]=B[pos3];
free(B);
}
void mergeSort(int *A,int l, int r)
{
int s;//индекс, по которому делим массив
if(l<r)//если больше одного элемента
{
s=(l+r)/2;
mergeSort(A, l, s); //сортировать левую половину
mergeSort(A, s+1, r); //сортировать правую половину
merge(A, l, s, r); //слить результаты в общий массив
}
}