折半插入排序,又称二分插入排序,实际上只是查找,是对插入排序算法的一种改进。
在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。?
static void BinaryInsertionSort(int[] intArr)
{
int numberOfLoop = 0;
int numberOfSwap = 0;
for (int i = 1; i < intArr.Length; i++)
{
//处理第i个数,i之前的数字排列是有序的
int j;
int temp = intArr[i];
int low = 0;
int high = i - 1;
while (low <= high)
{
numberOfLoop++;
//有序部分的的中间位置
int middle = (low + high) / 2;
if (intArr[middle] > temp)
{
high = middle - 1;
}
else
{
//最后low就是大于temp的第一个数的前一个位置
low = middle + 1;
}
}
//找到插入的位置了:low
for (j = i - 1; j >= low; j--)
{
numberOfLoop++;
numberOfSwap++;
intArr[j + 1] = intArr[j];
}
//最后一个位置设置成要排序数
numberOfSwap++;
intArr[low] = temp;
}
DisplaySortResult(numberOfLoop, numberOfSwap, intArr);
}
其运行效率要比直接插入排序和希尔排序都要好:

发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论