BS(Begin Status)
OP:{}
UP:{a 01 ,a 02 , … ,a 0i ,a 0i+1 , … ,a 0n?1 }
STEP1. 将数列分为OP(已有序)和UP(无序)两部分
OP:{a 11 }
UP:{a 12 , … ,a 1i ,a 1i+1 , … ,a 1n?1 }
STEP2. 从UP中取第一个元素放到OP中适当位置
具体方法是: 从 OP 的最后一个位置起向前进行循环比较
OP:{a ′ 21 ,a ′ 22 }
UP:{a ′ 23 , … ,a ′ 2i ,a 2i+1 ′ , … ,a ′ 2n?1 }
STEP3. 重复 STEP2, 直至 UP 变成为空序列(即数列元素个数为0)
OP:{a ′ x1 ,…,a ′ xi?1 }
UP:{a ′ xi ,a xi+1 ′ , … ,a ′ xn?1 }
ES(End Status)
OP:{a ′ n1 ,a ′ n2 ,a ′ n3 , … ,a ′ ni ,a ni+1 ′ , … ,a ′ nn?1 }
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上 从 一般的循环比较 改成 二分法折半查找
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-30 09:21:36