C中的插入排序程序给出了奇怪的结果

萨希尔·巴巴尔(Sahil Babbar)

该程序产生了意外的结果。我认为将数组返回到main()中存在问题。

#include <stdio.h>

int *isort(int array[], int size)
{
    int i, j, key;
    for (j = 1; j < size; j++) {
        array[j] = key;
        i = j - 1;
        while (i > 0 && array[i] > key) {
            array[i + 1] = array[i];
            i--;
        }
        array[i + 1] = key;
    }
    return array;
}   

main()
{
    int array[100], size, i, *result;

    printf("\nSIZE: ");
    scanf("%d", &size);

    printf("\nARRAY: ");

    for (i=0; i<size ; i++)
        scanf("%d\t", &array[i]);

    result = isort(array, size);

    for (i=0; i<size; i++)
        printf("%d\n", array[i]);
} 
Grijesh Chauhan

作业中的一个错误很严重!更正为:

array[j] = key; // it is undefined to assign with an uninitialized variable  

应该:

key = array[j];

编辑:另一个逻辑错误是您不在0内部循环中对index处的值进行排序

while (i > 0 && array[i] > key)

应该:

while (i >= 0 && array[i] > key) // note you are using a[i + 1] = a[1]
//        ^^                     // but not i - 1

此外,

您可以删除扫描数组值时\t的格式字符串scanf只需使用scanf("%d", &array[i]);如果您使用\tscanf格式字符串,它会消耗任何数量的空格的,直到你不输入非空白字符。

scanf的手册说,

一系列空格字符(空格,制表符,换行符等;请参见isspace(3))。此伪指令匹配输入中任何数量的空格,包括无空格。

还有一件事是,您不需要从排序函数返回数组地址,因为您正在传递地址,因此排序函数所做的更改将反映在中main虽然这不是一个错误。关键是您array[i]改为通过打印数组result[i]

如果您纠正了上述错误,则您的代码应该可以正常运行:在此处@键盘检查(我更改main()为int main()并返回,0但这是另一回事)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章