算法描述
直接插入排序在有序序列中查找时采用顺序查找,既然是有序序列,自然可以想到采用二分查找减少查找次数。时间复杂度还是 O(N2),因为不管是采用二分查找还是顺序查找,算法大部分时间都花在元素的移动上,二分查找只能减少比较次数,在查找位置上节约时间。
算法分析
时间复杂度:O(N2)
空间复杂度:O(1)
稳定性:稳定
代码实现
// C++ void binaryInsertionSort(int array[], int length) { for (int i = 1; i < length; ++i) { // 遍历无序序列 int left = 0; // 有序序列左指针 int right = i - 1; // 有序序列右指针 int key = array[i]; // 记录准备插入的元素 while (left <= right) { // 二分查找 int mid = (left + right) / 2; // 有序序列中间位置 if (array[mid] < key) { left = mid + 1; } else if (array[mid] > key){ right = mid - 1; } else { left = mid; break; } } // 找到元素插入位置后,整体后移 for (int j = i - 1; j >= left; --j) { array[j + 1] = array[j]; } array[left] = key; // 填入对应位置 } }
参考
数据结构(C语言版)
————————————————
版权声明:本文为CSDN博主「Acx7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。