Line 4: Line 4:
  
  
 +
Binary Search
 +
 +
Cuts the search area in half every time until the number is found
 +
 +
(caveat – the list must be sorted for the binary search to work)
 +
 +
For Example: Search for a number between 0 and 100.  Search for : 63
 +
 +
| ||||||||||||||||||||||
 +
O 50           100
 +
(first search eliminates anything less than 50)
 +
 +
||||||||||||||||             |
 +
50   75           100
 +
(second search eliminates anything greater than 75)
 +
 +
|     |||||||||||||||||||||
 +
50     63         75
 +
(at this point, the algorithm sees that 63 is one of the boundaries and the number has been found)
 +
 +
Code for a Binary Search:
 +
int binary_search(int *v,int value, int min_ndx,int max_ndx){
 +
   
 +
    int mid_ndx = (max_ndx + min_ndx)/2;
 +
   
 +
    //Base Step 1 - Ensures that the minimum index is larger than the maximum index
 +
    if (min_ndx > max_ndx){
 +
        return -1;
 +
    }
 +
   
 +
    //Baser Step 2 - Checks to see if the Middle Value is the Value that is being searched for
 +
    if(v[mid_ndx] == value){
 +
        return mid_ndx;
 +
    }
 +
   
 +
    //Recursive Steps
 +
   
 +
    if (value < v[mid_ndx]){
 +
        return binary_search(v, value, min_ndx, mid_ndx - 1);
 +
    }
 +
    else {
 +
        return binary_search(v, value, mid_ndx + 1, max_ndx);
 +
    }
 +
}
 +
 +
Selection Sort
 +
 +
Example: Sort the following list of numbers 14,4,92,74,3
 +
 +
(N.B. - the bolded numbers are the ones that the algorithm is searching through)
 +
 +
'''14 4 92 74 3'''
 +
(First iteration - looks for the smallest number out of the entire set – “3”  - and switches its location with the first element in the list)
 +
 +
3 '''4 92 74 14'''
 +
(Second iteration – finds the smallest number left in the search set – “4” – and switches it’s location with the second element in the list.  In this particular example, the four is in its proper location from the initial list, so no changes are )
 +
 +
3 4 '''92 74 14'''
 +
(Third Iteration – finds “14” as the smallest number swaps it with the number in the third position on the list)
 +
 +
3 4 14 '''74 92'''
 +
(Fourth iteration – finds “74” as the smallest number and swaps it with the fourth number in the list.)
 +
 +
Because there are only 5 elements in this list, the algorithm will only run 4 loops.  By definition, the fifth loops would show that the last number is in the correct position.
 +
 +
Code for a Selection Sort:
 +
void selection_sort(int *v,int items){
 +
    int i,j;
 +
    for (i = 0;i < items -1;i++){
 +
        int min_ndx;
 +
        int min_value = v[i];
 +
       
 +
        for (j = i;j < items;j++){
 +
            if (v[j] < min_value){
 +
                min_value = v[j];
 +
                min_ndx = j;
 +
            }
 +
        }
 +
        v[min_value] = v[i];
 +
        v[i] = min_value;
 +
    }
 +
}
  
Put your content here . . .
 
  
  

Latest revision as of 14:25, 27 April 2011


Binary & Selection Sort

Binary Search

Cuts the search area in half every time until the number is found

(caveat – the list must be sorted for the binary search to work)

For Example: Search for a number between 0 and 100. Search for : 63

| |||||||||||||||||||||| O 50 100 (first search eliminates anything less than 50)

|||||||||||||||| | 50 75 100 (second search eliminates anything greater than 75)

| ||||||||||||||||||||| 50 63 75 (at this point, the algorithm sees that 63 is one of the boundaries and the number has been found)

Code for a Binary Search: int binary_search(int *v,int value, int min_ndx,int max_ndx){

   int mid_ndx = (max_ndx + min_ndx)/2;
   
   //Base Step 1 - Ensures that the minimum index is larger than the maximum index
   if (min_ndx > max_ndx){
       return -1;
   }
   
   //Baser Step 2 - Checks to see if the Middle Value is the Value that is being searched for
   if(v[mid_ndx] == value){
       return mid_ndx;
   }
   
   //Recursive Steps
   
   if (value < v[mid_ndx]){
       return binary_search(v, value, min_ndx, mid_ndx - 1);
   }
   else {
       return binary_search(v, value, mid_ndx + 1, max_ndx);
   }

}

Selection Sort

Example: Sort the following list of numbers 14,4,92,74,3

(N.B. - the bolded numbers are the ones that the algorithm is searching through)

14 4 92 74 3 (First iteration - looks for the smallest number out of the entire set – “3” - and switches its location with the first element in the list)

3 4 92 74 14 (Second iteration – finds the smallest number left in the search set – “4” – and switches it’s location with the second element in the list. In this particular example, the four is in its proper location from the initial list, so no changes are )

3	4	92	74	14

(Third Iteration – finds “14” as the smallest number swaps it with the number in the third position on the list)

3 4 14 74 92 (Fourth iteration – finds “74” as the smallest number and swaps it with the fourth number in the list.)

Because there are only 5 elements in this list, the algorithm will only run 4 loops. By definition, the fifth loops would show that the last number is in the correct position.

Code for a Selection Sort: void selection_sort(int *v,int items){

   int i,j;
   for (i = 0;i < items -1;i++){
       int min_ndx;
       int min_value = v[i];
       
       for (j = i;j < items;j++){
           if (v[j] < min_value){
               min_value = v[j];
               min_ndx = j;
           }
       }
       v[min_value] = v[i];
       v[i] = min_value;
   }

}



Back to ECE264

Alumni Liaison

has a message for current ECE438 students.

Sean Hu, ECE PhD 2009