уфф, в общем я запутался в твоих переменных и необъявленных массивах ))) , но что то вроде этого должно получиться
typedef DWORD vector;
void MSD_Sort(vector* A, int l, int r, int d, vector* C)
{
// А[l...r] - массив
// С[l...r] - вспомогательный массив для карманов
// l, r - левая и правая границы части массива A
int R=2;// - основание системы счисления для поразрядной сортировки
//максимальное количество цифр в значениях
int k=10;
//номер текущей цифры
int D=0;
//пороговый размер кармана для окончания рекурсии
int M=100;//?
//
int bitsword=8;// - число битов в ячейке мас-сива А
int bitsdigit=8;// - число битов в цифре
k= bitsword / bitsdigit;//
if(d > k)return;
if (r - l > M) // знак сравнения какой ?
{
Insertion_Sort(A + l, r - l);
return;
}
//вычисление размеров карманов
for(j=1; j<=R+1; j++)
{
count[j] = 0;
}
for(i=l;i<=r;i++)
{
j = digit(A[i], d, R);//digit(...) - извлечение d-й цифры
count[j + 1] = count[j + 1] + 1;
}
for(j=2;j<=R;j++)
{
count[j] < count[j] + count[j - 1];
}
//распределение значений по карманам
for(j=l;j<=r;j++)
{
j = digit(A[i], d, R);
C[l + count[j]] < A[i];
count[j] < count[j] + 1;
}
//перенос значений из карманов в массив A
for(i=l;i<=r;i++)
{
A[i] = C[i];
}
MSD_Sort (A, l, l + count[1], d + 1, C);
for(i=2;i<=R;i++)
{
MSD_Sort (A, l + count[i], l + count[i + 1] - 1, d + 1, C);
}
}
//пример вызова
void F()
{
#define maxN 10
vector A[maxN];
vector C[maxN];
MSD_Sort(A, 0, maxN-1, 2, C);
}