算法导论有言:
Insertion-sort
for j<-- 2 to length[A]
do key<-- A[j]
i<---j-1
while i>0 and A[i]>key
do A[i+1]<--A[i]
i = i-1
A[i+1]<--key
按照这个算法进行程序设计
void insertionSort(int a[],int length)
{
for(int j=1;j<length;j++)
{
int key = a[j];
int i = j-1;
while(i>=0&&a[i]>key)
{
a[i+1] = a[i];
i = i - 1;
}
a[i+1] = key;
}
for(int i=0;i<length;i++)
cout<<a[i]<<" ";
cout<<endl;
}
设计上述算法过程中发生了两个错误:1.函数开始我只传了一个数组参数,想要在里面用sizeof(a)/sizeof(a[0])计算长度,结果发现这是不现实的,后来才记起,C++数组参数会自动指针化,使得a和a[0]的大小一样。2.算法设计是说的j=2到j<length以及i>0,但这样会导致数组越界,最后调试十几分钟才弄出来。
总结:原先总以为这些东西很简单,但是动手才知道啊,实践出真知!