二路插入排序是对折半插入排序的改进,其目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。
具体做法是:另设一个和r[]同类型的数组d,首先将r[0]赋值给d[0],并将d[0]看成是在排好序的序列中处于中间位置的记录,然后从r[]中第2个记录起依次插入到d[0]之前或之后的有序序列中。
先将待插记录的关键字和d[0]的关键字进行比较,若r[i] < d[0],则将r[i]插入到d[0]之前的有序表中。反之,则将r[i]插入到d[0]之后的有序表中。
在实现算法时,可将d看成是一个循环向量,并设两个指针first和final分别指示排序过程中得到的有序序列中的第一个记录和最后一个记录在d的位置。
其算法如下:
#include<iostream>
using namespace std;
void BinInsertSort(int r[],int size)
{
//first、final分别指示d中排好序的记录的第1个和最后1个记录的位置
int first=0,final=0;
int