Q BgQuestion:

Scholar
Karma Points: 203
Respect (81%):
posted by  Funkmasta on 5/22/2008 1:02:13 AM  |  status: Closed  

Sorting Algorithm?

Course Textbook Chapter Problem
N/A N/A N/A N/A
Question Details:
I am lost on this practice assignment...

Write a program in order to implement the following sorting algorithm:
1) Insertion Sort
2) Shell sort
Google for these algorithms.



Bonus Point Alert! Earn +4 additional karma points for helping this annual member.

AAnswers:

Answer Question
Expert
Karma Points: 909
posted by smart_IT on 5/22/2008 3:32:53 AM  |  status: Live
Asker's Rating: Lifesaver   
Funkmasta's comment:
"Thank you so muchfor the help. Your awesome"
Response Details:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* --------------------------------------------------------------------- */

struct NumNodeType
{
    int dat;
    struct NumNodeType *next;
};

/* Define new type names:  BaseElem   and   BasePtr  
 * to refer to the list nodes.  These new names can
 * be used in place of struct NumNodeType and
 * struct NumNodeType *  repsectively.
 */
typedef struct NumNodeType BaseElem;
typedef struct NumNodeType * BasePtr;


/* --------------------------------------------------------------------- */

BasePtr GetNode( int val )
{
    BasePtr node;
    node = malloc( sizeof(BaseElem) );
    node->dat = val;
    node->next = NULL;
    return node;   
}


int Length( BasePtr first )
{
    BasePtr move;
    int len=0;
    move = first;
    while (move != NULL)
    {
        len++;
        move = move->next;
    }
    return len;
}


void PrintNode( BasePtr node )
{
    printf("Val: %d\n", node->dat);
}

void PrintList( BasePtr first )
{
    BasePtr move;
    move = first;
    while (move != NULL)
    {
        PrintNode( move );
        move = move->next;
    }
}

void PrintNodeFile( FILE *ofp, BasePtr node )
{
    fprintf(ofp, "Val: %d\n", node->dat);
}

void PrintListFile( FILE *ofp, BasePtr first )
{
    BasePtr move;
    move = first;
    while (move != NULL)
    {
        PrintNodeFile( ofp,  move );
        move = move->next;
    }
}

int Compare( int x, int y)
{
    if (x < y) return -1;
    else if (x == y) return 0;
    else if (x > y) return 1;
}

BasePtr FindInsLoc( BasePtr first, BasePtr node )
{
    BasePtr move, prev;
    int val1, val2;
    int res = -1;
    val2 = node->dat;
    move = first;
    prev = move;

    val1 = move->dat;
    res = Compare( val1, val2 );

    while ( res < 0 && move != NULL)
    {
        prev = move;
        move = move->next;
        if (move != NULL)
        {
            val1 = move->dat;
            res = Compare( val1, val2 );
        }
    }   
    return prev;
}

BasePtr InsertNodeAfter( BasePtr first, BasePtr loc, BasePtr node)
{
    //printf("Insert %d after %d\n", node->dat, loc->dat);
    node->next = loc->next;
    loc->next = node;
    return first;
}


/* --------------------------------------------------------------------- */

int main( int argc, char *argv[] )
{
    BasePtr head, tail, tmp;
    int i;

    FILE *infile, *outfile;
    /* verify that 2 parameters were passed */   
    if ( argc != 3)
    {
        printf("Usage: a.out infile outfile\n");
        return 1;
    }
    /* open input file */
    infile = fopen( argv[1], "r");
    if (!infile)
    {
        printf("ERROR: file %s not available\n", argv[1]);
        return 1;   
    }
    /* open output file */
    outfile = fopen( argv[2], "w");
    if (!outfile)
    {
        printf("ERROR: file %s not available\n", argv[2]);
        return 1;   
    }

    tmp = GetNode(1);
    head=tmp;
    tail=tmp;

    for (i = 2; i <= 7; ++i)
    {
        tmp = GetNode(i);
        tail->next = tmp;
        tail = tmp;
    }

    PrintList( head );

    fprintf(outfile, "Starting --\n");
    PrintListFile(outfile, head );
    fprintf(outfile, "Stopping --\n");
    i = Length( head );
    printf("List size: %d\n", i);


    /* now make it work some some random data; the above
     * code is a test case in a controlled situation to make
     * sure things appear to work
     */
  /* insertion sort */
    srand( time(0) );

    BasePtr start, p, add;
    int x;
    tmp = GetNode(0);
    start=tmp;

    for (i = 1; i < 10; ++i)
    {
        x = rand() % 100 + 1;
        //printf("Inserting %d\n", x);
        add = GetNode(x);
        p = FindInsLoc( start, add );
        start = InsertNodeAfter( start, p, add );
        //printf("Version %d: \n", i);
        //PrintList( start );
    }

    printf("Sorted list ----- \n");
    PrintList( start );

    return 0;
}
If you post one question/problem, I will provide 1 input/answer. If you put "x" questions/problems, I will provide"x" inputs/answers.  In both cases, appropriate ratings are appreciated for every input. Thanks.
Answer Question
Ask New Question

Join Cramster's Community

Cramster.com brings together students, educators and subject enthusiasts in an online study community. With around-the-clock expert help and a community of over 100,000 knowledgeable members, you can find the help you need, whenever you need it. Join for free today » How Cramster is different than tutoring »