vlambda博客
学习文章列表

C++编程基础题解:插入排序

题目描述

   从键盘输入n个正整数,用插入排序法将他们按从小到大的顺序排列后输出。

输入

   输入文件包含两行,第1行为一个正整数n,n<=10000,第2行为n个整数。

输出

   输出文件仅一行,为排好序的n个数。数字之间用空格分开

样例输入

8

36 25 48 12 65 43 20 58

样例输出

12 20 25 36 43 48 58 65

插入排序思想:

     插入排序和打牌有点相似,为了方便打牌,抓牌时一般一边抓牌一边按花色和大小插入恰当的位置,当抓完所有的牌时,手中的牌便是有序的,这排序方法即插入排序。

      首先对数组的头两个元素进行排序,然后根据前两个元素排序的情况再把第三个元素插入到相应的位置,但要注意一个重要的问题:在插入这个元素前,应当先将将它后面的所有元素后移一位,以保证插入位置的原元素不被覆盖。

      例如:设n=8,数组中8个元素是: 36,25,48,12,65,43,20,58,执行插入排序程序后,其数据变动情况:

第0步:[36] 25 48 12 65 43 20 58 

第1步:[25 36] 48 12 65 43 20 58 

第2步:[25 36 48] 12 65 43 20 58 

第3步:[12 25 36 48] 65 43 20 58 

第4步:[12 25 36 48 65] 43 20 58 

第5步:[12 25 36 43 48 65] 20 58 

第6步:[12 20 25 36 43 48 65] 58 

第7步:[12 20 25 36 43 48 58 65]

参考程序和运行结果: