Fast Bucket Sort

Please support our C# advertiser: Intel Parallel Studio Home
vckicks vckicks is offline Offline Dec 17th, 2008, 4:48 pm |
0
A slightly modified version of Bucket Sort that uses LinkedLists and initializes buckets only when required. Results in massive speed improvements.
Quick reply to this message  
C# Syntax
  1. public static void Sort(int[] integers)
  2. {
  3. //Verify input
  4. if (integers == null || integers.Length <= 1)
  5. return;
  6.  
  7. //Find the maximum and minimum values in the array
  8. int maxValue = integers[0]; //start with first element
  9. int minValue = integers[0];
  10.  
  11. //Note: start from index 1
  12. for (int i = 1; i < integers.Length; i++)
  13. {
  14. if (integers[i] > maxValue)
  15. maxValue = integers[i];
  16.  
  17. if (integers[i] < minValue)
  18. minValue = integers[i];
  19. }
  20.  
  21. //Create a temporary "bucket" to store the values in order
  22. //each value will be stored in its corresponding index
  23. //scooting everything over to the left as much as possible (minValue)
  24. //e.g. 34 => index at 34 - minValue
  25. LinkedList<int>[] bucket = new LinkedList<int>[maxValue - minValue + 1];
  26.  
  27. //Move items to bucket
  28. for (int i = 0; i < integers.Length; i++)
  29. {
  30. if (bucket[integers[i] - minValue] == null)
  31. bucket[integers[i] - minValue] = new LinkedList<int>();
  32.  
  33. bucket[integers[i] - minValue].AddLast(integers[i]);
  34. }
  35.  
  36. //Move items in the bucket back to the original array in order
  37. int k = 0; //index for original array
  38. for (int i = 0; i < bucket.Length; i++)
  39. {
  40. if (bucket[i] != null)
  41. {
  42. LinkedListNode<int> node = bucket[i].First; //start add head of linked list
  43.  
  44. while (node != null)
  45. {
  46. integers[k] = node.Value; //get value of current linked node
  47. node = node.Next; //move to next linked node
  48. k++;
  49. }
  50. }
  51. }
  52. }

Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC