#include <iostream>
using namespace std;
int BinarySearch(int *p_arry,int p_left,int p_right,int e);
void Move(int *p_arry,int p_start,int p_last,int number);
void BinaryInsertionSort(int *pArr, int nLen)
{
int j=0; // 插入的位置代号,作为函数的全局变量。
for (int i=1;i<nLen;i++)
{
if (pArr[i]<pArr[i-1])
{
int temp=pArr[i];
int k=BinarySearch(pArr,0,i-1,pArr[i]); //二分法二分法查找需要插入位置
Move(pArr,k,i-1,1);
pArr[k]=temp;
}
}
}
int BinarySearch(int *p_arry,int p_left,int p_right,int e) //二分法查找需要插入位置。
{
int left=p_left;
int right=p_right-1;
while(left<=right)
{
int mid=(int)(left+right)/2;
if (p_arry[mid]<=e)
{ left=mid+1;}
else
{right=mid-1;}
}
return left;
}
void Move(int *p_arry,int p_start,int p_last,int number) // 一连串数据 向右移动N个位置。
{
for (int i=p_last;p_start<=i;i--)
{
p_arry[i+number]=p_arry[i];
}
}
二分法插入排序代码
最新推荐文章于 2022-04-09 16:30:22 发布