Вы хотите использовать сортировку вставкой или сортировку по Radix. Вот некоторые реализации C ++:
Radix Sort
void radix (int byte, long N, long *source, long *dest)
{
long count[256];
long index[256];
memset (count, 0, sizeof (count));
for ( int i=0; i<N; i++ )
count[((source[i])>>(byte*8))&0xff]++;
index[0]=0;
for ( i=1; i<256; i++ )
index[i]=index[i-1]+count[i-1];
for ( i=0; i<N; i++ )
dest[index[((source[i])>>(byte*8))&0xff]++] = source[i];
}
Вам нужно позвонить radix()
четыре раза, поскольку он работает только на один столбец.
Сортировка вставок
void insertSort(int a[], int length)
{
int i, j, value;
for(i = 1; i < length; i++)
{
value = a[i];
for (j = i - 1; j >= 0 && a[j] > value; j--)
a[j + 1] = a[j];
a[j + 1] = value;
}
}