插入排序是一种稳定的排序,时间复杂度为O(n^2)。
原理:
对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
1) 从第一个元素开始,该元素可以认为已经被排好序;
2) 取出下一个元素,在已经排序的元素序列中从后向前扫描;
3) 若该元素大于取出的元素,则将该元素移到下一位置;
4) 若该元素小于等于取出的元素,则将取出的元素插入到该元素之后;
5) 重复步骤2,直至处理完所有的元素。
代码实现
void insertionSort(int* a, int length)
{
if (a == NULL || length <= 0)
return;
for (int i=1;i<length;i++)//从第二个数开始
{
int temp, j;
temp = a[i];
for (j = i; j > 0 && temp < a[j - 1]; j--)//找到temp满足小于前一个数,交换
a[j] = a[j - 1];
a[j] = temp;
}
}