插入排序
目的:将一组数据,按照数字的大小进行降序或升序的排列组合方式。
内容:相当于将大小不一的水果按照大小的差异性进行排序。例如,有一组水果(大小并未提前排序,随机进行放置)苹果,西瓜,樱桃,南瓜,圣女果。若是按照升序进行排序,就是将小点的水果放在前面,大的水果放在后面。
- 1、选择一个苹果,由于苹果前没有任何水果,默认在此时放置苹果为真
- 2、选择接下来的西瓜,由于前面的苹果本身比西瓜大,因此在这时西瓜放置合理。
- 3、选择樱桃,和前一个西瓜相比,樱桃小,故西瓜和樱桃位置倒换。再把樱桃和苹果进行比较,樱桃小,故樱桃和西瓜位置倒换。此时,位置是:樱桃,苹果,西瓜,南瓜,圣女果
- 4、选择南瓜,和前一个西瓜相比,南瓜大于西瓜,故此时位置不变,为真
- 5、选择圣女果,和前一个南瓜相比,圣女果小于南瓜,故两者位置倒换。再和前一个西瓜相比,圣女果小于西瓜,故两者位置倒换。再和前一个苹果相比,圣女果小于苹果,故两者位置倒换。再和前一个樱桃相比,圣女果大于樱桃,故位置不变。此时,位置是:樱桃,圣女果、苹果,西瓜,南瓜
- 6、由于选择完毕,故排序结束
INSERTIONSORT(A)
for j=2 to A.length
key = A[j];
i =j-1
while i> and A[i]>key
A[i+1]=A[i]
i = i-1;
A[i+1]=key
关于插入排序的性质:
初始化:循环的第一次迭代之前,听为真
保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真
终止:在循环终止时,不变式提供了一个性质:证明算法正确性
当前两条性质成立时,在循环的每次迭代之前循环不变式为真。(类似于数学归纳法,其中为了证明某条性质成立,需要证明一个基本情况和一个归纳步。这里,证明第一次迭代之前不变式成立对应于基本情况,证明从一次迭代到下一次迭代不变式成立对应于归纳步)
利用插入排序在,证明上述性质成立:
- 初始化:首先证明在第一次循