数据结构与算法学习之路:二分插入排序

来源:互联网 发布:qq群怎么优化排名 编辑:程序博客网 时间:2024/05/17 14:25

一、什么是二分插入排序?

设在数据表中有一个元素序列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;elselow = middle + 1;}for (int j = i; j > low; --j)nums[j] = nums[j - 1];nums[low] = nums[0];}</span>



0 0