Skip to main content

Binary Search



You have a big list of numbers and you want to search an element from it, how to do it?
Simplest approach would be to compare this number with all the elements from the list. In this case, if the element is the last element then we have to go through all the elements till we reach the element we want and what if it doesn't exist.

There are many searching algorithms to get it done efficiently, one of them is Binary Search.

In binary search :
Step 1. Sort the list of elements in ascending order
Step 2. Check the value of element that needs to be search (lets call this 'x') with the middle element (midElement) in the list.
Step 3. If the value of x is greater than midElement then the value is present in the right half of the array or else it is present in the left half of the array.
Step 4. Depending on the right or left half of the array, x will be compared. Lets assume it is present in left half, then the leftMidElement is compared with x and then Step 3 is repeated until we find the position for our element.

Below is the code for binary search :

private static int binarySearch(int list[], int leftIndex, int rightIndex,
            int x) {

        if (leftIndex <= rightIndex) {
            int midIdx = (leftIndex + (rightIndex)) / 2;
            if (x == list[midIdx])
                return midIdx;

            if (x > list[midIdx]) {
                leftIndex = midIdx + 1;
            } else if (x < list[midIdx]) {
                rightIndex = midIdx - 1;
            }
        }else{
            return -1;
        }
        return binarySearch(list, leftIndex, rightIndex, x);

    }

    public static void main(String arg[]) {
        int list[] = { 3, 5, 7, 15, 16, 22, 84 };
        int leftIndex = 0;
        int rightIndex = list.length;
        int position = binarySearch(list, leftIndex, rightIndex - 1, 7);
        if(position == -1){
            System.out.println("Value not found!!");
        }else{
            System.out.println("The position = " + position);   
        }
       
    }

 

In case of linear search the time complexity of the application is O(n) but in case of Binary Search it is O(logn);
 
 

Comments

Popular posts from this blog

Create Table in Liquibase

For creating table using liquibase you can use below code and add it in your liquibase file. <createTable tableName=“employee”>      <column name="id" type="int">      <constraints primaryKey="true" nullable="false"/>   </column>      <column name="first_name" type="varchar(255)"/>   <column name="last_name" type="varchar(255)"/>   <column name="username" type="varchar(255)">      <constraints unique="true" nullable="false"/>   </column> </createTable> The use is pretty simple it's the way it looks : Tag: <createTable></createTable> This is an opening/ending tag for creating a table. These tags will enclose column sub tags which will define columns for the table. Attribute:   tableName : Name of the table which you want to create. (This is a mandatory  

ReferenceError: dhtmlXGrid is not defined : Resolved

For the errors like : ReferenceError: dhtmlXDataView is not defined ReferenceError: dhtmlXGrid is not defined ReferenceError: dhtmlXTree is not defined ReferenceError: dhtmlXTreeGrid is not defined etc I have been working on dhtmlx for long time now and this is one of the most basic exception faced by the developer and which in fact is very easy to resolve. Reasons: 1. You are actually referring to a wrong location of the JS file.    - This is a very common mistake done and most of the time we are so damn sure that we don't even care about checking the path once. Even though you have copied it from your existing project where it is working, if you face this issue don't forget to check the path once, it won't harm you. 2. Check for relative path.    - So now you have copied it and paste it in your new file where you are going to use the dhtmlx component and when you open your file you get this error and it becomes frustrating knowing that same thing is wo

How databasechangeloglock and databasechangelog table used by liquibase?

Liquibase takes care of executing the query on the database while maintaining the list of queries executed and also maintaining the locks over the tables simultaneously. The two tables that are used by the liquibase for this purpose are : Databasechangeloglock : This table have following columns ID | LOCKED| LOCKGRANTED | LOCKEDBY. This maintains the locks information granted to the user. The primary purpose of this table is to make sure that two machines don't attempt to modify the data at the same time. Databasechangelog : This table have following columns ID | AUTHOR | FILENAME | DATEEXECUTED | ORDEREXECUTED | EXECTYPE | MD5SUM | DESCRIPTION | COMMENTS | TAG | LIQUIBASE This table maintains the list of the statements that are executed on the database.