插入排序的一个问题(排序函数为什么要有两个参数?)
我的问题貌似很简单,但一直搞不清楚。下面两个插入排序的C程序,几乎相同。不同的地方就是insertsort函数的参数个数不同。第一个程序排序函数有两个参数,能输出正确结果。第二个程序只少了一个整形参数,但为什么第二个程序就不能输出正确的结果呢?
我怎么也想不明白,求大神解答。
/*程序1:该程序insertsort函数有两个参数*/
#include <stdio.h>
#define len(a) (sizeof(a)/sizeof(int))
void insertsort(int a[], int);
int main()
{
int i;
int a[10] = { 10, 34, 32, 95, 84, 90, 25, 65, 31, 69};
insertsort(a, len(a));
for (i = 0; i < len(a); i++)
printf("Num[%d] = %d.\n", i+1, a[i]);
printf("len(a) = %d\n", len(a));
return 0;
}
void insertsort(int a[], int lim)
{
int i, j, key;
for (j = 1; j < lim; j++) {
key = a[j];
i = j - 1;
while (i >= 0 && a[i] >= key) {
a[i+1] = a[i];
i = i - 1;
}
a[i+1] = key;
}
return;
}
/*程序2:该程序insertsort函数只有一个参数*/
#include <stdio.h>
#define len(a) (sizeof(a)/sizeof(int))
void insertsort(int a[]);/*此处只有一个参数*/
int main()
{
int i;
int a[10] = { 10, 34, 32, 95, 84, 90, 25, 65, 31, 69};
insertsort(a);
for (i = 0; i < len(a); i++)
printf("Num[%d] = %d.\n", i+1, a[i]);
printf("len(a) = %d\n", len(a));
return 0;
}
void insertsort(int a[])
{
int i, j, key;
int s = len(a);
for (j = 1; j < s; j++) {
key = a[j];
i = j - 1;
while (i >= 0 && a[i] >= key) {
a[i+1] = a[i];
i = i - 1;
}
a[i+1] = key;
}
return;
}