基本思想为把数组a中n个元素看成包含一个元素a[0]的有序表及其余元素组成的无序表
每次从无序表中选出第一个元素,插入到有序表合适位置,插入次数为n-1次,完成排序。
核心算法思路如下:
> 无序表每次a[i]先和前面一个数据a[i-1]比较,如果a[i] > a[i-1]
> 说明a[0…i]也是有序的,无须调整。否则就令j=i-1,temp=a[i]。
> 然后一边将数据a[j]向后移动一边向前搜索,
> 当有数据a[j]<a[i]时停止并将temp放到a[j + 1]处。
详细实现代码如下:
* 再对将a[j]插入到前面a[0…j-1]的有序区间所用的方法进行改写
* 用数据交换代替数据后移。如果a[j]前一个数据a[j-1] > a[j],
* 就交换a[j]和a[j-1],再j--直到a[j-1] <= a[j]。
* 这样也可以实现将一个新数据新并入到有序区间。
详细实现代码如下:
完全代码及测试结果如下:
不足之处及改进欢迎指正!
网友评论