插入排序的原理在于,将数字序列 d 分为两个序列(前者有序,后者无序),每遍历一个元素就将该元素插入到前半部份的合适位置。
插入排序的算法原理很容易理解,实现步骤如下:
- i = 0,将 d[i] 插入到 i 之前的有序序列之中;
- i = i + 1,将 d[i] 插入到 i 之前的有序序列之中,插入的过程为将自己与自己之前的元素进行比较,如果自己比其前面的元素都大,则什么也不用做;否则就插入到合适的位置;
- 终止条件: i = n - 1。
插入排序的时间复杂度(平均条件下)为 O(n * n)。
实现代码如下:
void insertSort(double *dataIn, int sizeIn)
{/* 2012/08/23, by wbprime@myopera.com */
for (int i = 0; i < sizeIn; ++i) {
for (int j = 1; j < i && dataIn[i] < dataIn[i-j]; ++j) {
swap(dataIn[i], dataIn[i-j]);
}
}
}