c - 插入排序代码使用insert和insertsort!

标签 c

我写了一个插入排序的代码,但它不是排序.. 请帮助我对我的代码进行所需的更改。 感谢x

#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 代码.. 我必须使用插入和插入排序这两个函数!

最佳答案

您错误地测试了 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]);
}

关于c - 插入排序代码使用insert和insertsort!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796349/

相关文章:

c - OpenMP time 和 clock() 给出了两个不同的结果

c - 使用 MSVC 与 TCC 的 Bubblesort 程序的意外输出

c - 尝试打印到文件时 C 中出现段错误

c - C 中未声明的标识符错误

带有运算符解释的 C 宏

c - 我如何指向另一个指针然后增加第一个指针的值而不更改第二个指针的值

c - 使用extern关键字在c中导入函数

c - 在 C 中对数组进行排序

c - 用于arm7tdmi的Buildroot ARM工具链编译SourceForge Archopen

c - 在一个文件夹中写入十亿个文件但出现 "(No space left on device)"错误