Compare sorting algorithms' performance: Difference between revisions

Content added Content deleted
No edit summary
Line 784: Line 784:
* [http://i43.tinypic.com/2nqrzfs.png reversed range]
* [http://i43.tinypic.com/2nqrzfs.png reversed range]
* [http://i41.tinypic.com/24q8hmg.png shuffled range]
* [http://i41.tinypic.com/24q8hmg.png shuffled range]


=={{header|D}}==
<lang d>
import std.algorithm;
import std.container;
import std.datetime;
import std.random;
import std.stdio;

immutable size_t arrSize = 10000;
immutable int[arrSize] allOnes = 1;
immutable int[arrSize] sortedData = genSorted();
static int[arrSize] randomData;

int[arrSize] genSorted()
{
int[arrSize] data;
for (int i = 0; i < data.length; i++)
{
data[i] = i+1;
}
return data;
}

int[arrSize] genRandom()
{
int[arrSize] data;
Random gen = Random(unpredictableSeed);
for (int i = 0; i < data.length; i++)
{
data[i] = gen.front;
gen.popFront;
}
return data;
}

void main()
{
randomData = genRandom();
writeln("Testing against all ones.");
auto r = benchmark!(allOnesBubble, allOnesInsertion, allOnesBuiltIn,
allOnesHeap)(100);
writefln("Bubble Sort:\t%10d", r[0].to!("usecs", int));
writefln("Insertion Sort:\t%10d", r[1].to!("usecs", int));
writefln("Built-in Sort:\t%10d", r[2].to!("usecs", int));
writefln("Heap Sort:\t%10d", r[3].to!("usecs", int));

writeln("\nTesting against sorted data.");
r = benchmark!(sortedBubble, sortedInsertion, sortedBuiltIn, sortedHeap)(100);
writefln("Bubble Sort:\t%10d", r[0].to!("usecs", int));
writefln("Insertion Sort:\t%10d", r[1].to!("usecs", int));
writefln("Built-in Sort:\t%10d", r[2].to!("usecs", int));
writefln("Heap Sort:\t%10d", r[3].to!("usecs", int));

writeln("\nTesting against random data.");
r = benchmark!(randomBubble, randomInsertion, randomBuiltIn, randomHeap)(100);
writefln("Bubble Sort:\t%10d", r[0].to!("usecs", int));
writefln("Insertion Sort:\t%10d", r[1].to!("usecs", int));
writefln("Built-in Sort:\t%10d", r[2].to!("usecs", int));
writefln("Heap Sort:\t%10d", r[3].to!("usecs", int));
}

void bubbleSort(T)(T[] list)
{
for (int i = list.length-1; i > 0; i--)
{
for (int j = i -1; j >= 0; j--)
{
if (list[i] < list[j])
{
T temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
}
}

void allOnesBubble()
{
int[] data = allOnes.dup;
bubbleSort(data);
}

void sortedBubble()
{
int[] data = sortedData.dup;
bubbleSort(data);
}

void randomBubble()
{
int[] data = randomData.dup;
bubbleSort(data);
}

unittest
{
int[5] list = [2,5,8,3,1];
bubbleSort(list);
assert(isSorted(list.dup));
}

void insertionSort(T)(T[] list)
{
foreach (i; 1..list.length)
{
T currElem = list[i];
size_t j = i;
for (; j > 0 && currElem < list[j-1]; j--)
{
list[j] = list[j-1];
}
list[j] = currElem;
}
}

void allOnesInsertion()
{
int[] data = allOnes.dup;
insertionSort(data);
}

void sortedInsertion()
{
int[] data = sortedData.dup;
insertionSort(data);
}

void randomInsertion()
{
int[] data = randomData.dup;
insertionSort(data);
}

unittest
{
int[5] list = [2,5,8,3,1];
insertionSort(list);
assert(isSorted(list.dup));
}

void allOnesBuiltIn()
{
int[] data = allOnes.dup;
sort!("a < b")(data);
}

void sortedBuiltIn()
{
int[] data = sortedData.dup;
sort!("a < b")(data);
}

void randomBuiltIn()
{
int[] data = randomData.dup;
sort!("a < b")(data);
}

void allOnesHeap()
{
int[] data = allOnes.dup;
auto heap = BinaryHeap!(int[], "a > b")(data);
}

void sortedHeap()
{
int[] data = sortedData.dup;
auto heap = BinaryHeap!(int[], "a > b")(data);
}

void randomHeap()
{
int[] data = randomData.dup;
auto heap = BinaryHeap!(int[], "a > b")(data);
}
</lang>

Timings from my VM with 10,000 elements in each array:
<pre>
Testing against all ones.
Bubble Sort: 15746446
Insertion Sort: 6415
Built-in Sort: 110079
Heap Sort: 23997

Testing against sorted data.
Bubble Sort: 14770093
Insertion Sort: 6889
Built-in Sort: 55631
Heap Sort: 21959

Testing against random data.
Bubble Sort: 40575526
Insertion Sort: 9022029
Built-in Sort: 177563
Heap Sort: 48902
</pre>


=={{header|J}}==
=={{header|J}}==