- 工作原理
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
稳定性:稳定
时间复杂度:O(n)
空间复杂度:O(1)
最好的情况:原始数据已经有序
最坏情况:原始数据逆序 - 算法描述
1:从第一个数开始,假设认定该元素已有序
2:取出下一个待插入数据,从已有序的数据从后往前扫描
3:如果已排序元素大于待排序的元素,则将已有序的元素向后移,直到找到比待排序小于或等于的元素位置为止
4:将新元素插入该位置
5:重复2-4所有步骤,直到所有元素有序
//golang语言版
func insertsort(arr []int) {
lenth := len(arr)
i := 0
j := 0
for i = 1; i < lenth; i++ {
tmp := arr[i]
for j = i - 1; j >= 0; j-- {
if tmp < arr[j] {
arr[j+1] = arr[j]
} else {
break
}
}
arr[j+1] = tmp
}
}
//c语言版
void insertSort(int *array,int arrlen)
{
int tmp;
for(int i = 1;i < arrlen;++i)
{
int j = i- 1;
int tmp = array[i];
while(j >= 0 && tmp < array[j])
{
array[j+1] = array[j];
--j;
}
array[j+1] = tmp;
}
}