Home

Friday, January 23, 2015

C++ Programs for Binary Search (Ascending) array of 'n' entered numbers

/*
Program for Searching array of n entered numbers for a specific number (Sorted [Ascending] Array Search) 
using function of return type bool.
Note:
If entered number is present at more than one index then the index of first occurence of entered number
in array will be displayed.
*/
 
#include<iostream>
using namespace std;
 
bool SortedSearch(int[], int, int &, int);
void AscendingOrder(int[], int);
void swap(int &, int &);
 
int main()
{
    int size, num[50], key, index;
 
    //For Inputting amount of numbers
    do
    {
        cout << "How many numbers u want to sort (Max 50)?\t";
        cin >> size;
        if (size < 0 || size > 50)
            cout << "Invalid Input.......\nEnter number again\n";
    } while (size < 0 || size > 50);
 
    //For inputting n Numbers
    for (int i = 0; i < size; i++)
    {
        cout << "Enetr number at [" << i << "] index?\t";
        cin >> num[i];
    }
 
    //for formatting output
    for (int i = 0; i < 80; i++)
        cout << "=";
 
    AscendingOrder(num, size);        //For sorting Array in Ascending order
 
    //displays sorted array
    cout << "Entered Numbers in ASCENDING Order are:\n\t";
    for (int i = 0; i < size; i++)
    {
        cout << num[i];
        if (i != size - 1)
            cout << ", ";
    }
 
    //for formatting output
    cout << endl;
    for (int i = 0; i < 80; i++)
        cout << "=";
 
    //for inputting key-value
    cout << "Enter number that you want to search?\t";
    cin >> key;
 
    //For Displaying Result
    if (!SortedSearch(num, size, index, key))
        cout << "\n" << key << " is not present in entered array.";
    else
        cout << "\n" << key << " is present in entered array at [" << index << "] index.";
 
    cout << endl;
    return 0;
}
 
//For Sorting array in ascending Order
void AscendingOrder(int num[], int n)
{
    //For sorting in Ascending Order
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j<n; j++)
        {
            if (num[i] > num[j])
                swap(num[i], num[j]);
        }
    }
 
}
 
 
//For swapping 2 numbers
void swap(int &a, int &b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}
 
//Function for searching entered number in array
bool SortedSearch(int num[], int size, int &index, int key)
{
    int first = 0, last = size - 1, mid;
 
    //For finding index of entered number if it exists
    while (first <= last)
    {
        mid = (first + last) / 2;
        if (num[mid] == key)
        {
            index = mid;
            return 1;
        }
        else if (num[mid] < key)
            first = mid + 1;
        else
            last = mid - 1;
    }
 
    return 0;
}
 
OUTPUT

/*
Program for Searching array of n entered numbers for a specific number (Sorted [Ascending] Array Search) 
using function of return type void.
*/
 
#include<iostream>
using namespace std;
 
void SortedSearch(int[], int, int);
void AscendingOrder(int[], int);
void swap(int &, int &);
 
int main()
{
    int size, num[50], key;
 
    //For Inputting amount of numbers
    do
    {
        cout << "How many numbers u want to sort (Max 50)?\t";
        cin >> size;
        if (size < 0 || size > 50)
            cout << "Invalid Input.......\nEnter number again\n";
    } while (size < 0 || size > 50);
 
    //For inputting n Numbers
    for (int i = 0; i < size; i++)
    {
        cout << "Enetr number at [" << i << "] index?\t";
        cin >> num[i];
    }
 
    //for formatting output
    for (int i = 0; i < 80; i++)
        cout << "=";
 
    AscendingOrder(num, size);        //For sorting Array in Ascending order
 
    //displays sorted array
    cout << "Entered Numbers in ASCENDING Order are:\n\t";
    for (int i = 0; i < size; i++)
    {
        cout << num[i];
        if (i != size - 1)
            cout << ", ";
    }
 
    //for formatting output
    cout << endl;
    for (int i = 0; i < 80; i++)
        cout << "=";
 
    //for inputting key-value
    cout << "Enter number that you want to search?\t";
    cin >> key;
 
    //For Displaying Result
    SortedSearch(num, size, key);
 
    cout << endl;
    return 0;
}
 
//For Sorting array in ascending Order
void AscendingOrder(int num[], int n)
{
    //For sorting in Ascending Order
    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j<n; j++)
        {
            if (num[i] > num[j])
                swap(num[i], num[j]);
        }
    }
 
}
 
 
//For swapping 2 numbers
void swap(int &a, int &b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}
 
//Function for searching and displaying entered number in array
void SortedSearch(int num[], int size, int key)
{
    int first = 0, last = size - 1, mid, temp;
    bool flag = 1;
 
    //For finding index of 1st occurence entered number if it exists
    while (first <= last)
    {
        mid = (first + last) / 2;
        if (num[mid] == key)
        {
            flag = 0;
            temp = mid;
            break;
        }
        else if (num[mid] < key)
            first = mid + 1;
        else if (num[mid] > key)
            last = mid - 1;
    }
 
 
    if (flag)
        cout << "\n" << key << " is not present in entered array.";
    else                    //for displaying all index(es) of all occurences of entered number
    {
        for (int i = temp; num[i] == key; i--)
            cout << "\n" << key << " is present in entered array at [" << i << "] index.";
    }
 
}

OUTPUT
 

No comments:

Post a Comment