排序算法之直接插入排序

  • 工作原理
    通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
    稳定性:稳定
    时间复杂度: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;
    }
}
点赞