Monday, March 1, 2010

Sorting

WAP to perform ascending order sort without using bubble sort mechanism for sorting!!(i.e; with min overhead!!)



SOLUTIONS:

BY AVINASH

As per my knowledge sorting with less overhead can vary from algorithm and many dependencies on algorith so i am posting Quick sort which is also a sorting algorithm with fastest.

#include"stdio.h"
#include"stdlib.h"
#define MAX 10

void MyQuickSort(int iLow, int iHigh, int aNumbers[]);
int MySortDivision(int iLow, int iHigh, int aNumbers[]);

int main()
{
    int aNumbers[MAX];
    int iCount = 0;
    for(iCount =0; iCount < MAX; iCount++)
        //aNumbers[iCount] = rand()%100;
        scanf("%d",&aNumbers[iCount]);
    printf("NUMBERS BEFORE SORTING:");
    for(iCount =0; iCount < MAX; iCount++)
        printf("%d ",aNumbers[iCount]);
    printf("\n");
    MyQuickSort(0, MAX-1,aNumbers);
    printf("NUMBERS AFTER SORTING:");
    for(iCount =0; iCount < MAX; iCount++)
        printf("%d ",aNumbers[iCount]);
    return 0;
}

void MyQuickSort(int iLow, int iHigh, int aNumbers[])
{
    int iPivotElementIndex = 0;
    if(iLow < iHigh)
    {
        iPivotElementIndex = MySortDivision(iLow, iHigh, aNumbers);
        MyQuickSort(iLow, iPivotElementIndex - 1 ,aNumbers);
        MyQuickSort(iPivotElementIndex + 1, iHigh, aNumbers);
    }
    return;
}


int MySortDivision(int iLow, int iHigh, int aNumbers[])
{
    int iInternalLow = iLow;
    int iInternalHigh = iHigh;
    int iPivot = aNumbers[iLow];
    int iLowValue,iHighValue;
    while(iInternalLow < iInternalHigh)
    {
        iHighValue = aNumbers[iInternalHigh];
        while(iPivot <= iHighValue)//changed
        {
            if(iInternalHigh <= iInternalLow)
                break;
            iInternalHigh--;
            iHighValue = aNumbers[iInternalHigh];
        }
        aNumbers[iInternalLow] = iHighValue;
        iLowValue = aNumbers[iInternalLow];
        while(iPivot > iLowValue)
        {
            if(iInternalLow >= iInternalHigh)
                break;
            iInternalLow++;
            iLowValue = aNumbers[iInternalLow];
        }
        aNumbers[iInternalHigh] = iLowValue;
    }
    aNumbers[iInternalLow] = iPivot;
    return iInternalLow;
}

2 comments:

santosh said...

is the sorting for numbers or strings...............

Avinash Reddy K said...

try for numbers once done we can go for strings...

counter