算法思想
插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。
动画演示
算法代码
void swap(int* a,int* b)
{
int tem=*a;
*a=*b;
*b=tem;
}
void InsertSort(int* nums,int len)
{
for(int i=1;i<len;++i)
{
for(int j=i-1;j >= 0 && nums[j]>nums[j+1];--j)
{
swap(&nums[j],&nums[j+1]);
}
}
}
时间复杂度
在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,时间复杂度 O(n)
最坏的情况是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为O(n^2)
平均时间复杂度为 O(n^2)