Skip to main content

Posts

Showing posts with the label sort

Bucket Sort

The following uses the divide-and-conquer method of resolution, by dividing the problem into smaller arrays, sorting each smaller array, then reinserting the subarrays back into the original array.  This is not a pure solution, in that it uses the .NET List, rather than a linked list struct. using System; using System.Collections; using System.Collections.Generic; namespace Algorithms {     class BucketSort     {         public int[] Sort()         {                //creates arbitrary array             int[] arrayToSort = { 11, 7, 22, 2, 33, 3, 17, 44, 4, 55, 5, 66, 6, 1, 77 };             //create bucket using hash, x/10             List<int>[] bucketList = CreateHashedArray(arrayToSort, 10);             //sort the bucket list back into the or...

Counting Sort

I did not spend a significant amount of time removing potential issues with this code, but then, neither do most examples of the Counting Sort; there are more interesting algorithms ahead.  The most obvious flaws in this particular implementation are as follows: It cannot handle negative integers It is designed only for integers.  using System; namespace Algorithms {     class CountingSort     {         public int[] Sort()         {             //creates array             int[] arrayToSort = { 2, 1, 2, 1, 3, 0, 3, 4, 4, 3, 0, 2, 1, 3, 5, 1, 3 };             //create array for bucket             int min = 0;              int max = 0;             for (int counter = 0; counter < arrayToSort.Length; counter++)   ...

Heap Sort

Heap Sort is interesting because the use of the 'heapify' method that creates a binary tree as a flat array. First, a binary tree, also known as a heap , is created, and then the same function is used to sort the elements. In a heap, the first node in the array at zero (0) is the top node of the binary tree. The next two (2) items are the two (2) subnodes of the top node, and so on.  For each node at a position (positionIndex), its 2 subnodes are in the following positions: int left = 2 * positionIndex + 1; int right = 2 *  positionIndex + 2; The CommonMethods.Swap() function is a reusable class , since swapping values by position is a common action during these example sorts. Class using System; namespace Algorithms {     class HeapSort     {         public int[]  Sort()         {             //creates array             int[] arrayTo...

Selection Sort

The least intelligent sorting algorithm, it typically has the worst performance of sorting routines, and learns nothing to improve its actions as it traverse the array: Class using System; namespace Algorithms {     class SelectionSort     {         public SelectionSort()         {             int[] arrayToSort = { 11, 1, 22, 2, 33, 3, 44, 4, 55, 5, 66, 6, 7, 77 };             Sort(arrayToSort);             Console.WriteLine("End");         }         public int[] Sort(int[] arrayToSort)         {             int currentMin;             int max = arrayToSort.Length - 1;             for (int counter = 0; counter < max - 1; counter++)           ...

QuickSort

This is similar to Median Sort, which I skipped, but Quicksort supersedes it.  This uses a similar strategy, but instead of finding the median, it accepts any value for the pivot index, then simply performs an insertion sort on the resulting partitioned array of 2 sub-arrays.  The insertion sort used here is from a prior post on Insertion Sort . Class using System; namespace Algorithms {     class QuickSort     {         public void Sort()         {             //creates array             int[] arrayToSort = { 11, 1, 22, 2, 33, 3, 44, 4, 55, 5, 66, 6, 7, 77 };             //gets pivotIndex, set at midpoint of arry             int pivotIndex = Partition(arrayToSort, 0, arrayToSort.Length - 1, (arrayToSort.Length - 1)/2);             //sorts...

Insertion Sort

The implementation of insertion sort is very well known, but to improve upon the standard description this method uses System.Collections.ObjectModel.IComparable, allowing it to sort a range of types, and the class and methods are marked as static.  Both modifications make the methods more reusable than in typical examples.             IComparable[] start = new IComparable[] {44, 2,4,1,6,7,33,25,5,2};             IComparable[] result = InsertionSort.Sort(start);             IComparable[] startAlpha = new IComparable[] { "r", "A", "z", "c", "a", "h"};             IComparable[] resultAlpha = InsertionSort.Sort(startAlpha); The two lower routines are useful for quick sort, in that they will handle portions of arrays Class static class InsertionSort     {         /// <summary>         /// Given a ...

Algorithms in a Nutshell

The following are some of the the chapters from Algorithm's in a Nutshell, from which I will produce code in .NET, specifically C#, VB.NET or F#, to clarify the principles for myself. Chapter 4. Sorting Algorithms ·        Section 4.1. Overview ·        Section 4.2. Insertion Sort ·        Section 4.3. Median Sort ·        Section 4.4. Quicksort ·        Section 4.5. Selection Sort ·        Section 4.6. Heap Sort ·        Section 4.7. Counting Sort ·        Section 4.8. Bucket Sort ·        Section 4.9. Criteria for Choosing a Sorting Algorithm ·        Section 4.10. References Chapter 5. Searching ·        Section 5.1....