一、什么是二分插入排序?
设在数据表中有一个元素序列v[0],v[1],v[2]......v[n].其中v[0],v[1],v[2]......v[i-1]是已经排好序的元素。在插入v[i]。利用折半搜索寻找v[i]的插入位置。同时,二分插入排序是一种稳定的排序。当n较大时,总排序码比较次数比直接插入排序的最差情况好得多,但比最好情况要差,所元素初始序列已经按排序码接近有序时,直接插入排序比二分插入排序比较次数少。二分插入排序元素移动次数与直接插入排序相同,依赖于元素初始序列。
事实上,我们可以将二分插入排序理解为直接插入排序的一种改进,利用二分的思想减少了对比的次数。
时间复杂度:虽然二分插入排序中,找到插入的位置的平均时间是O(nlogn),但是移动元素仍需要O(n^2)的时间。所以总的来说,二分插入排序的时间复杂度仍然是O(n^2)。
二、算法思想:
利用二分查找找出位置,然后插入。
三、代码实现:
<span style="font-size:12px;">void BinaryInsert_Sort(int* nums, int length){
int low, high, middle;
for (int i = 2; i < length; ++i){
low = 1;
high = i - 1;
nums[0] = nums[i];
while (low <= high){
middle = (high + low) / 2;
if (nums[middle]>=nums[0])
high = middle - 1;
else
low = middle + 1;
}
for (int j = i; j > low; --j)
nums[j] = nums[j - 1];
nums[low] = nums[0];
}</span>
本文介绍了二分插入排序,这是一种稳定的排序方法。通过折半搜索确定元素插入位置,减少比较次数。虽然平均查找时间为O(nlogn),但由于元素移动次数仍为O(n^2),整体时间复杂度为O(n^2)。文章还阐述了算法思想,并提供了代码实现。

2035

被折叠的 条评论
为什么被折叠?



