直接插入排序算法的原理与实现

BS(Begin Status)

OP:{}
UP:{ a 01   , a 02   , … , a 0i   , a 0i+1   , … , a 0n1   }

STEP1. 将数列分为OP(已有序)和UP(无序)两部分

OP:{ a 11   }
UP:{ a 12   , … , a 1i   , a 1i+1   , … , a 1n1   }

STEP2. 从UP中取第一个元素放到OP中适当位置

具体方法是: 从 OP 的最后一个位置起向前进行循环比较
OP:{ a  21   , a  22   }
UP:{ a  23   , … , a  2i   , a 2i+1     , … , a  2n1   }

STEP3. 重复 STEP2, 直至 UP 变成为空序列(即数列元素个数为0)

OP:{ a  x1   ,…, a  xi1   }
UP:{ a  xi   , a xi+1     , … , a  xn1   }

ES(End Status)

OP:{ a  n1   , a  n2   , a  n3   , … , a  ni   , a ni+1     , … , a  nn1   }
UP:{}


代码实现

//C++代码实现
void InsertSort(int arr,int arrSize)
{
    for(int i = 1;i < arrSize; i++)
    {
        int target=arr[i],j=i;
        while(j > 0 && target < arr[j-1])
        {
            arr[--j+1]=a[j];
        }
        arr[j]=target;
    }
}

拓展–折半插入排序(针对于数列个数比较大)

改进的关键措施是 在OP上 从 一般的循环比较 改成 二分法折半查找

猜你喜欢

转载自blog.csdn.net/liudglink/article/details/47749117