====== Shakersort =======
===== Grundlegendes =====
Ein Array mit einer gewissen Anzahl von Werten ist zu sortieren. Der **Shakersort** erledigt dies so:\\
Er durchläuft das zu sortierende Feld //abwechselnd// von //vorne nach hinten//. Dabei tauscht er, wenn er von vorne durchläuft, die Zahlen aus, wenn die erste größer ist als die zweite Zahl, dasselbe passiert analog in der anderen Richtung.\\
Wie zu erkennen ist, beschreibt der Shakersort eine gewisse Ähnlichkeit mit dem //Bubblesort//, er ist nämlich eine **Erweiterung** dessen.\\
//Andere Namen// für den Shakersort sind:\\
* Cocktailsort
* Ripplesort
* Shearsort
* BiDiBubbleSort (bi-directional Bubblesort)
===== Code und Visualisierung =====
Hier sind Pseudocode, ein C++ Code und die Visualisierung dargestellt.
==== Pseudocode: ====
prozedur shakerSort( A : Liste sortierbarer Elemente )
beginn := -1
ende := Länge( A ) - 2
wiederhole
vertauscht := falsch
beginn := beginn + 1
für jedes i von beginn bis inklusive ende wiederhole
falls A[ i ] > A[ i + 1 ] dann
vertausche( A[ i ], A[ i + 1 ] )
vertauscht := wahr
ende falls
ende für
falls vertauscht = falsch dann
brich wiederhole-solange-Schleife ab
ende falls
vertauscht := falsch
ende := ende - 1
für jedes i von ende bis inklusive beginn wiederhole
falls A[ i ] > A[ i + 1 ] dann
vertausche( A[ i ], A[ i + 1 ] )
vertauscht := wahr
ende falls
ende für
solange vertauscht
prozedur ende
==== Code für C++: ====
#include
#include
#include
using namespace std;
int main()
{
int z[6], hilfe; //Array für Zahlen und Variable für die Hilfsvariable.
int beginn=-1, ende=4; //Beginn- und Endvariable
bool bewegt=false; //Boolean, ob bewegt oder nicht
cout<<"Unsortierte Zahlen:\n";
for(int i=0;i<6;i++)
{
z[i]=rand()%100;
if(z[i]<99) z[i]=z[i]++;
if(z[i]==z[i-1]) i--; //Wenn gleiche Zahl, nocheinmal berechnen
cout<z[j+1])
{
hilfe=z[j];
z[j]=z[j+1];
z[j+1]=hilfe;
hilfe=0;
//Test für Zahlenausgabe nach jedem Schritt
for(int h=0;h<6;h++)
{
cout<=beginn;k--) //for-Schleife - von ende bis beginn, wenn getauscht werden muss, wird getauscht
{
if(z[k]>z[k+1])
{
hilfe=z[k];
z[k]=z[k+1];
z[k+1]=hilfe;
hilfe=0;
//Test für Zahlenausgabe nach jedem Schritt
for(int a=0;a<6;a++)
{
cout<
==== Visualisierung: ====
[[http://www.hermann-gruber.com/lehre/sorting/Shaker/Shaker.html|Visualisierung via Java-Applet]]
===== Quellen =====
[[http://de.wikipedia.org/wiki/Shakersort|Wikipedia (Pseudocode und alle Namen)]]\\
[[http://www.sortieralgorithmen.de/shakersort/index.html|Sortieralgorithmen.de (Information)]]\\
[[http://www.hermann-gruber.com/lehre/sorting/Shaker/Shaker.html|Visualisierungsquelle]]