Пожалуйста, помогите с блок-схемой
Добавлено: 29 янв 2010, 00:02
Задача: Алгоритм сортирует записи r1,...rn, используя вспомогательную таблицу COUNT,..., COUNT[v] в предположении что все ключи - целые числа в диапазоне u<=Kj<=v, 1<=j<=N. На последнем этапе выполнения алгоритма все записи в требуемом порядке переносятся в область выводы S1,..., Sn.
Вот программа:
Очень нужна помощь. Заранее благодарна!
Вот программа:
Код: Выделить всё
#include "Sorter.h"
#include <math.h>
CSorter::CSorter( int size , int limit)
{
arrSize = size;
arrayToSort = new int [arrSize];
generateRandomArray ( arrSize , limit );
}
CSorter::~CSorter()
{
if(arrayToSort != NULL)
{
delete[] arrayToSort;
arrayToSort = NULL;
}
}
AnsiString CSorter::getArray ( int sortType )
{
AnsiString strSortedArray("");
int *buf = new int[arrSize];
if ( sortType == 0 )
buf = sortByShell();
if ( sortType == 1 )
buf = countSort();
if ( sortType == 2)
buf = arrayToSort;
for (int i = 0; i < arrSize; i++)
strSortedArray += "{" + IntToStr( buf[i] ) + "}";
if(buf != arrayToSort && buf != NULL)
{
delete[] buf;
buf = NULL;
}
return strSortedArray;
}
int* CSorter::sortByShell( )
{
int* sortedArray = arrayToSort;
int d = arrSize, i, j;
while (d > 0)
{
d /= 2;
for (i = d; i < arrSize; i++) {
int tmp = sortedArray[i];
for (j = i-d; (j >= 0) && (sortedArray[j] > tmp); j -= d) {
sortedArray[j+d] = sortedArray[j];
}
sortedArray[j+d] = tmp;
}
}
return sortedArray;
}
int *CSorter::countSort()
{
int *sortedArray = new int[arrSize];
int **Count = new int*[2];
for (int i = 0; i < 2; i++)
Count[i] = new int [arrSize];
for (int i = 0; i < arrSize; i++)
Count[0][i] = arrayToSort[i];
for (int i = 0; i < arrSize; i++ )
Count[1][i] = 0;
for ( int i = arrSize - 1; i >= 1; i-- )
for ( int j = i - 1; j >= 0; j --)
{
if (arrayToSort[i] > arrayToSort[j])
Count[1][i]++;
else
Count[1][j]++;
}
for ( int i = 0; i < arrSize; i++)
sortedArray[ Count[1][i] ] = Count[0][i];
delete[] Count;
return sortedArray;
}
int* CSorter::bubbleSort( int *array)
{
int buf(0);
if(array == NULL)
return NULL;
for (int i = 1; i <= arrSize ; i ++)
for(int k = i - 1; k < arrSize - i; k++)
if( array[k] > array[k+1] )
{
buf = array[k + 1];
array[k + 1] = array[k];
array[k] = buf;
}
return array;
}
void CSorter::generateRandomArray ( int size , int limit )
{
if( size <= 0 || limit <= 0)
return;
for ( int i = 0; i < size; i++ )
arrayToSort[i] = abs( rand ()%limit ) ;
}