### Shaker sort algorithm

Posted:

**Thu Mar 28, 2013 2:33 pm**Hello!

While working with the Sabre engine, I had to use a sorting algorithm and I ended up

searching information about different sorting algorithms.

I found this one called "Shaker sort", (also known as "Cocktail sort") and

with the help of this link: http://www.dreamincode.net/forums/topic ... aker-sort/ wrote

a GE version of it.

It's pretty simple and it works well, so I decided to share it with you.

Here's how Wikipedia animates the sorting process:

So, simplified, what the function does, is that it sweeps back and forth through the array,

swapping adjacent elements if they are in wrong order (bigger one before smaller one) until the array has been sorted.

Download example ged:

More info about Shaker sort:

http://en.wikipedia.org/wiki/Cocktail_sort

The function code with some commenting to make it more understandable:

While working with the Sabre engine, I had to use a sorting algorithm and I ended up

searching information about different sorting algorithms.

I found this one called "Shaker sort", (also known as "Cocktail sort") and

with the help of this link: http://www.dreamincode.net/forums/topic ... aker-sort/ wrote

a GE version of it.

It's pretty simple and it works well, so I decided to share it with you.

Here's how Wikipedia animates the sorting process:

So, simplified, what the function does, is that it sweeps back and forth through the array,

swapping adjacent elements if they are in wrong order (bigger one before smaller one) until the array has been sorted.

Download example ged:

More info about Shaker sort:

http://en.wikipedia.org/wiki/Cocktail_sort

The function code with some commenting to make it more understandable:

- Code: Select all
`void shakerSort(int * input_array, int array_count)`

{

int i;

int swap;

int temp;

do

{

swap = 0; //no values have been swapped

for (i = array_count - 1; i > 0; i --) //go through the array starting from the end

{

if (testArray[i - 1] > testArray[i]) //if the value of the smaller index element is

{ //higher than the value of the current element

temp = input_array[i - 1]; //swap the values

testArray[i - 1] = testArray[i];

testArray[i] = temp;

swap = 1; //some values have been swapped

}

}

for (i = 1; i < array_count; i ++) //go through the array starting from the beginning

{

if (testArray[i - 1] > testArray[i]) //if the value of the smaller index element is

{ //higher than the value of the current element

temp = testArray[i - 1]; //swap the values

testArray[i - 1] = testArray[i];

testArray[i] = temp;

swap = 1; //some values have been swapped

}

}

}

while(swap); //continue the do loop when swap is equal to 1 (-> some values have been swapped)

}