获取数组中元素的数量不按预期工作

时间:2013-12-15 03:52:15

标签: c arrays sorting insertion-sort

这里我实现了一个简单的排序(插入),但是我没有得到正确的数组大小。也就是说,我的长度变量设置为等于1.另外,我可以用什么方法优化此插入排序算法的代码?感谢

void insertionSort(int a[])
{
    int sorted = 1;
    int length = sizeof(a) / sizeof(int);
    int i = 0;
    int tmp;

    printf("%d   ", length);

    if (length < 2)
        return;

    for (i = 1; i < length - 1; i++)
    {
        sorted = i;
        while (a[sorted] < a[sorted - 1] && sorted > 0)
        {
            tmp = a[sorted];
            a[sorted] = a[sorted - 1];
            a[sorted - 1] = tmp;
            sorted--;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

int length = sizeof(a) / sizeof(int);

这将返回指针a的大小除以int的大小。总是等于一个。

您必须将长度传递给函数void insertionSort(int a[], size_t length){

创建数组的函数必须跟踪数组中活动元素的数量才能执行此操作。

答案 1 :(得分:0)

C数组并不存在。这实际上意味着你对C中的数组没有很好的抽象支持。作为一个例子,如果我给你(你是函数insertionSort)一个数组(比如a)你赢了不能确定它的大小!数组在C中没有大小。

那么sizeof(a)是什么?第一个a不是数组,而是指向第一个元素的内存地址的常量指针;就这样。然后sizeof(a)只会给出指针a的大小。

如果要在C中管理数组,则必须使用变量来存储其长度。这就是为什么大多数处理数组的函数都有其他参数length