类似扑克牌排序
C语言代码:
void InsertSort(int array[],unsigned int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp = array[i];//store the original sorted array in temp
for(j=i ; j>0 && temp < array[j-1] ; j--)//compare the new array with temp
{
array[j]=array[j-1];//all larger elements are moved one pot to the right
}
array[j]=temp;
}
}
算法导论伪代码换成C语言:
void InsertSort(int array[],unsigned int n)
{
int i,j,temp;
for(j=1;j<n;j++)
{
temp = array[j];
i=j-1;
while(i>=0 && array[i]>temp)
{
array[i+1]=array[i];
i--;
}
array[i+1]=temp;
}
}
循环不变式验证算法正确。对于循环不变式,必须证明它的三个性质:
1.初始化
循环开始第一次是正确的。
2.保持
在循环的某一次迭代开始之前它是正确的,在下一次迭代开始之前它也是正确的。
3.终止
循环结束后,不变式给了我们一个有用的性质,那就是所得的最终序列是有序的,按升序或者降序排列。
循环不变式类似数学归纳法。