[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
Solved

# shell sort

Posted on 2007-03-26
Medium Priority
229 Views
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?
0
Question by:btocakci
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 39

Expert Comment

ID: 18792260
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 Comment

ID: 18792335
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

LVL 39

Accepted Solution

itsmeandnobodyelse earned 2000 total points
ID: 18792473
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

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Navigation is an important part of web design from a usability perspective. But it is often a pain when it comes to a developer’s perspective. By navigation, it often means menuing. This is less theory and more practical of how to get a specific gro…
How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
###### Suggested Courses
Course of the Month14 days, 19 hours left to enroll