tags:

views:

61

answers:

1

i have written a code for insertion sort but it is nt sorting.. kindly help me out in making the desired changes to mycode. thanx

#include<stdio.h>

int compare(int a,int b)

{

if(a>b)

return 1;

else if( a<b)

return -1;

else if(a==b)

return 0;

}


void insert(int m, int ms[], int size)

{   

    int j,k;

    for (j=0; j<size; j++)   // Find the right position

       { if (compare(m, ms[j])) break;

    // Assertion: j is the right position for m

          for (k=size-1; k>=j; k--)  // Right shift values>m

       ms[k+1] = ms[k];

    ms[j] = m; } // Insert m

}



void insertSort(int ms[], int size)

{   

    int j;

    // Loop Invariant: 

    //  The sublist from ms[0] to ms[j-1] is sorted

    for (j=1; j<size; j++) {

         insert(ms[j], ms, j);

    }

}



void main()

{

int i,arr[5]={55,66,22,44,39};

printf("sorting\n");

insertSort(arr,5);



for( i=0;i<5;i++)

{

printf("\n%d",arr[i]);

}

}

this is my xact code.. i have to use the two functions insert and insert sort!

A: 

You're testing the return value of compare incorrectly. You probably want something like this:

if (compare(m, ms[j]) <= 0) break;

Also, remove the curly braces inside function insert, they are screwing the structure of your code. The statements following the break should not be inside the first loop's body.

By the way, if you make your code simpler and tidier, you'll be less likely to make silly mistakes. Proper indentation will help you visualize the structure of your code easily. For example:

void insort(int a[], int n, int e) {
    int j;
    for (j = n - 1; j >= 0 && a[j] > e; j--)
        a[j + 1] = a[j];
    a[j + 1] = e;
}
void insertion_sort(int a[], int n) { 
    int i;
    for (i = 1; i < n; i++)
        insort(a, i, a[i]);
}
Sheldon L. Cooper