插入排序的思想是构造一个循环不变式,可用扑克牌的例子来解释,左手为已经排好序的牌,右手为未排好序的牌,分别将右手中的牌依次一张一张地插入到左手,将左手中的每一张牌依次和这张牌比较,以此来确定这张牌在左手中的正确顺序,然后进行下一张牌,在这个过程中,左手中的牌始终是排好序的,即不变的,——称为循环不变式
初始:左手中只有一张牌,是排好序的
保持:依次将左手中的牌插入适当位置,保持左手排好序
终止:当右手中的牌全部到左手中
初始时:只有1,已经排好序
保持:while(i>=1&&A[i]>key)
{
A[i+1]=A[i]//右移
i--;
}
A[i+1]=key;//插入
已经跑过的代码如下
#define N 10 int main() { int i=0; int a[N]; for(i=0;i<N;i++) scanf("%d",&a[i]); int j,key; i=0; for(j=1;j<N;j++) { key=a[j]; i=j-1; while(i>=0&&a[i]<key) { a[i+1]=a[i]; i--; } a[i+1]=key; } for(i=0;i<N;i++) { printf("%d\t",a[i]); } return 0; }
时间: 2024-11-04 04:46:55