OK Quicksort IS fast. But what if you just wanna sort 30 items? Then Quicksort becomes a bit of overkill. So what most people then use is the one and only popular "bubblesort", also called "standard exchange sort". Let me present you here with my implementation of another sort(among many others) the "straight insertion sort". It's the same technique cardplayers use to place their cards in order. With the Stopwatch class you can even proof that the straight insertion sort of 10 integers is 3 to 4 times faster then bubblesort! So dump bubblesort! Straight insertion sort is as easy or even easier to implement.
See for yourself in these code snippets.
Sorting with a stopwatch.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics; //for stopwatch
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Stopwatch SW = new Stopwatch();
SW.Start();
int[] Myar = { 7, 6, 2, 10, 1, 7, 3, 8, 5, 9 };
BubbleSort(Myar);
for(int i = 0; i < Myar.Length; i++)
Console.WriteLine(Myar[i]);
SW.Stop();
Console.WriteLine("Bubble sort = {0} elapsed ticks.", SW.ElapsedTicks);
SW.Reset();
SW.Start();
int[] Myar2 = { 7, 6, 2, 10, 1, 7, 3, 8, 5, 9 }; //same as Myar
StraightInsertionSort(Myar2);
for (int i = 0; i < Myar2.Length; i++)
Console.WriteLine(Myar2[i]);
SW.Stop();
Console.WriteLine("Straight insertion sort = {0} elapsed ticks.", SW.ElapsedTicks);
Console.ReadKey();
}
//sort the items of an array using straight insertion sort
//
static void StraightInsertionSort(int[] listtosort)
{
int element;
int ic; //index of element to be compared, index starts at 0
for (int loopvar = 1; loopvar < listtosort.Length; loopvar++) //loop trough each element in turn
{
element = listtosort[loopvar];
ic = loopvar-1;
while (ic >= 0 && listtosort[ic] > element )
{
listtosort[ic + 1] = listtosort[ic]; //move all elements
ic--;
}
listtosort[ic + 1] = element; //Insert element
}
}
// sort the items of an array using bubble sort
//
public static void BubbleSort( int[] ar )
{
for ( int pass = 1; pass < ar.Length; pass++ )
for ( int i = 0; i < ar.Length - 1; i++ )
if ( ar[ i ] > ar[ i + 1 ] )
Swap( ar, i );
}
// swap two items of an array
//
public static void Swap( int[] ar, int first )
{
int hold;
hold = ar[ first ];
ar[ first ] = ar[ first + 1 ];
ar[ first + 1 ] = hold;
}
}
}
ddanbe 2,724 Professional Procrastinator Featured Poster
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.