这里我实现了一个简单的排序(插入),但是我没有得到正确的数组大小。也就是说,我的长度变量设置为等于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--;
}
}
}
答案 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
。