使用插入和插入排序插入排序代码!

时间:2010-09-26 02:21:14

标签: c

我已经编写了一个插入排序的代码,但它是nt排序.. 请帮助我对mycode进行所需的更改。 感谢名单

#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]);

}

}

这是我的xact代码.. 我必须使用插入和插入排序两个函数!

1 个答案:

答案 0 :(得分:0)

您正在错误地测试compare的返回值。你可能想要这样的东西:

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

此外,删除函数insert中的花括号,它们会拧紧代码的结构。 break后面的语句不应该在第一个循环体内。

顺便说一句,如果你使你的代码更简单,更整洁,你就不太可能犯下愚蠢的错误。正确的缩进将帮助您轻松地可视化代码的结构。例如:

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]);
}