Monday, February 06, 2012
 
   
 
Welcome to my site

First let me say thanks for stopping by my site. My name is David Hanson-Graville and I am a IT consultant working in the UK. Let me make it clear, I am passionate about technology and specifically .net and its various forms. I've programmed in a range of langages, but I can say, I am now at my happiest when coding with c#. I hope my blog is an enjoyable & educational read and please feel free to email me at David.Hanson@OnTheBlog.net if you have any questions. 

C# Binary Search Minimize
Location: BlogsOnTheBlog    
Posted by: David Hanson Mon, 07 Apr 2008 12:50:37 GMT

A binary search is an algorithm is able to find a specific value within a sorted array by making increasingly acurate guesses based on a comparision result. I was discussing this with a friend at work the other day and thought I would put one together in C# for illustrative purposes. 

First we need to create the array with random data and then sort this array. I decided that using guids would provide a good level of random data for our test. I therefore create a million guids in my array then sort it. This is shown below.

        ///
        /// Mains the specified args.
        ///
        /// The args.
        static void Main(string[] args)
        {
 
            //Setup random data.
            List<String> RandomItems = new List<string>();
            for (int i = 0; i < 1000000; i++){RandomItems.Add(Guid.NewGuid().ToString());}
            //Get search item and sort.
            string searchFor = RandomItems[345];
            RandomItems.Sort();
            Console.WriteLine("Press enter to run test");
            Console.ReadLine();
         }

Next I created the algorithm which would quickly narrow down on the value we are searching for. There are 3 things to remember when it comes to binary searches.

  1. Find the median of a particular range within your array.
  2. Compare the value at that midpoint to see if ths greaterthan, lessthan or Equal.
  3. Call the same method recursively in order to narrow the search.

The Binary search class is shown below.

        ///
        /// Finds the index. (Public Overload.)
        ///
        ///
        /// The sorted list.
        /// The search criteria.
        ///The index of the specified item.
        public static int FindIndex(List<String> sortedList,string searchCriteria)
        {
            return FindIndex(sortedList, searchCriteria, 0,sortedList.Count);
        }
 
        ///
        /// Finds the index.
        ///
        /// The sorted list.
        /// The search criteria.
        /// The startposition.
        ///The index of the specified
        private static int FindIndex(List<string> sortedList,string searchCriteria, int startPosition, int endPosition)
        {
            int lastPos = startPosition;
            int range = (endPosition - startPosition);
            if (range == 0) return 0;
            int midPoint = (range / 2) + startPosition;
            int equality = sortedList[midPoint].CompareTo(searchCriteria);
 
            Console.WriteLine(midPoint);
            //Equals
            if (equality == 0)
                return midPoint;
            //Greater than
            if (equality == -1)
                return FindIndex(sortedList, searchCriteria, midPoint, endPosition);
            //Less than
            if (equality == 1)
                return FindIndex(sortedList, searchCriteria, lastPos, midPoint);
 
            return -1;
    
        }

 Finally, I want to run the algorithm and work out the cost of finding my value within a million strings. So we need to add the following to our static main.

//Run our binary search.
DateTime start = DateTime.Now;
Console.WriteLine("Item found at position [" + BinarySearch.FindIndex(RandomItems, searchFor).ToString() + "]");
DateTime end = DateTime.Now;
Console.WriteLine("Cost M/s: " + new TimeSpan(end.Ticks - start.Ticks).TotalMilliseconds.ToString());
Console.ReadLine();

 The results of running this algorithm are shown here.

Press enter to run test
 
500000
250000
375000
312500
343750
328125
335937
332031
330078
329101
329589
329833
329955
330016
329985
330000
330008
330012
330014
330013
Item found at position [330013]
Cost M/s: 5
Permalink |  Trackback

Comments (1)   Add Comment
Re: C# Binary Search    By Mike Park on Wed, 16 Apr 2008 08:13:40 GMT
5 milliseconds. Not bad!


Your name:
Title:
Comment:
Security Code
Enter the code shown above in the box below
Add Comment   Cancel 
Tweets Minimize
Twitter / LordHanson
  1. LordHanson: #southeastern have once again proved their rolling stock can reach new lows.

    Published Wed, 01 Feb 2012 08:09:05 +0000 by
  2. LordHanson: Checked in at The Cards http://t.co/LANfHukb

    Published Sun, 29 Jan 2012 11:04:51 +0000 by
  3. LordHanson: @BillGates Run for president Bill.

    Published Fri, 27 Jan 2012 08:41:35 +0000 by
  4. LordHanson: @swhelband Again!

    Published Fri, 27 Jan 2012 08:39:44 +0000 by
  5. LordHanson: The update for the Nokia Lumia recently has done wonders for battery life! Good job #Nokia #windowsphone

    Published Fri, 27 Jan 2012 08:36:27 +0000 by
  6. LordHanson: Checked in at Victoria Station http://t.co/L0BJ5smd

    Published Thu, 26 Jan 2012 08:35:41 +0000 by
  7. LordHanson: @pdl_uk VAT No: 924 5933 08 Shoulder again! Dang!

    Published Wed, 25 Jan 2012 21:47:45 +0000 by
  8. LordHanson: @tommyjmquinn I think that would be easier. Next Thursday ok?

    Published Wed, 25 Jan 2012 21:04:46 +0000 by
  9. LordHanson: @tommyjmquinn London bridge doable?

    Published Wed, 25 Jan 2012 20:32:34 +0000 by
  10. LordHanson: @tommyjmquinn so where's the meet?

    Published Wed, 25 Jan 2012 19:04:02 +0000 by
  11. LordHanson: @tommyjmquinn your choice mate. Somewhere easy to get to from Bankside. :-D

    Published Tue, 24 Jan 2012 22:01:20 +0000 by
  12. LordHanson: @tommyjmquinn so Darius, Justin and me confirmed. Thursday good for you? Waiting to hear from Sal.

    Published Tue, 24 Jan 2012 21:47:21 +0000 by
  13. LordHanson: @mark_mann which is illegal I thought!

    Published Tue, 24 Jan 2012 21:46:17 +0000 by
  14. LordHanson: Details on Windows Phone 8 confirms NT kernel http://t.co/5Qg1MILl

    Published Tue, 24 Jan 2012 21:34:11 +0000 by
  15. LordHanson: But next target for framework is #winrt. Need to see if my dependencies like DI, RX, ReactiveUi etc will work. Hmm

    Published Mon, 23 Jan 2012 08:33:16 +0000 by
  16. LordHanson: @pdl_uk hey Phil, how's marathon training going?

    Published Mon, 23 Jan 2012 08:31:37 +0000 by
  17. LordHanson: So I now have a framework for apps which targets .net, Silverlight and windows phone. Thankyou project linker!

    Published Mon, 23 Jan 2012 08:28:08 +0000 by
  18. LordHanson: For some reason dropped twitter for a month. Can't say I missed it really. Maybe I need to broaden my follow list!

    Published Mon, 23 Jan 2012 08:24:44 +0000 by
  19. LordHanson: Soo much hype over SIRI when it came out yet I never see anyone use it and don't know anybody who does either. #apple #sooverhyped

    Published Mon, 23 Jan 2012 08:23:18 +0000 by
  20. LordHanson: #southeastern customer satisfaction survey given to me today. This should be fun! Bit wait......no extremely poor option! Just very poor.

    Published Mon, 23 Jan 2012 08:20:09 +0000 by
Print  
Archive Minimize
Print  
Contact me Minimize
Print  
Microsoft Certs Minimize







Print  
Silverlight News Minimize
Silverlight - Google News
  1. Windows Phone 8 - Silverlight Apps Are Legacy - iProgrammer

    Published Fri, 03 Feb 2012 13:03:27 GMT by
  2. Super Bowl Streaming Fail - StreamingMedia.com

    Published Mon, 06 Feb 2012 05:59:33 GMT by
  3. Delphi Developers Rejoice at Silverlight, FireMonkey and VCL Coming Together ... - San Francisco Chronicle (press release)

    Published Tue, 31 Jan 2012 17:34:58 GMT by
  4. WP7 Upgrades and WP8 - Silverlight or C++ - iProgrammer

    Published Tue, 31 Jan 2012 17:21:58 GMT by
  5. Watch The 2012 Super Bowl Online - SportsGrid

    Published Sun, 05 Feb 2012 23:15:21 GMT by
  6. US viewers can watch Super Bowl on Mac, iOS - Macworld

    Published Sun, 05 Feb 2012 20:22:31 GMT by
  7. Hydra 4 Sharpens Its Teeth, Breathes New Fire - Dr. Dobb's

    Published Sun, 05 Feb 2012 17:25:01 GMT by
  8. Will Silverlight live or die? Microsoft won't say - InfoWorld

    Published Fri, 27 Jan 2012 11:00:46 GMT by
  9. Cablevision Flips Live TV To Laptops With Microsoft Silverlight - Multichannel News

    Published Fri, 27 Jan 2012 17:24:53 GMT by
  10. Do SharePoint & Silverlight Have a Future Together? - CMSWire

    Published Mon, 16 Jan 2012 17:29:27 GMT by
Print