# shell sort

i want to sort only the elements with even indexes in array using shellsort. since i didnot see the algorithm clearly , i cant edit it. my code for shellsort is:

template <class type>

void shellSort(type A[], int size)
{
int i, j, incrmnt;
type temp;

incrmnt = size / 2;
while (incrmnt > 0)
{
for (i=incrmnt; i < size; i++)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] > temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;
}
A[j] = temp;
}
incrmnt /= 2;
}
}

where i should edit, any help?
###### Who is Participating?

Commented:
That should do it:

int makeEven(int i)
{
return ((i%2) == 0)?  i : --i;
}

template <class type>
void shellSort(type A[], int size)
{
int i, j, incrmnt;
type temp;

incrmnt = makeEven(size / 2);
while (incrmnt > 0)
{
for (i=incrmnt; i < makeEven(size); i += 2)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] > temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;         // j is still even
}
A[j] = temp;
}
incrmnt = makeEven(incrmnt/2);
}
}

0

Commented:
What happens with the odd indexes? If it doesn't matter or if they sould be sorted with their even neighbor, you could do that:

template <class type>
void shellSort(type B[], int size)
{

struct Even
{
type x[2];
bool operator> (const Even& e) const
{ return x[0] > e.x[0]; }
};

Even* A = reinterpret_cast<Even*>(B);
size /= 2;

...
}

Regards, Alex
0

Author Commented:
odd indexes will remain same.eg:

12 8 2 15 68 94 49 -> 2   8  12  15  49  94  68
i will try to sort this new array with another algortihm. just to understand the algorithms more.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.