折半插入排序(Binary Insertion Sort)

简介: 算法分析代码实现参考

算法描述


    直接插入排序在有序序列中查找时采用顺序查找,既然是有序序列,自然可以想到采用二分查找减少查找次数。时间复杂度还是 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版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Acx77/article/details/116849372

相关文章
|
8月前
|
搜索推荐 算法 Java
sort-08-counting sort 计数排序
这是一个关于排序算法的系列文章摘要。文章详细介绍了多种排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序以及大文件外部排序。计数排序是一种线性时间复杂度的稳定排序算法,由 Harold H. Seward 在1954年提出。基础版计数排序通过创建一个与最大元素等长的新数组来统计每个元素出现的次数,然后填充排序结果。改良版则考虑了空间浪费问题,通过找出最小值来减少数组长度。此外,还提出了使用 TreeMap 来扩展排序算法以适应非数字元素的情况。
|
存储 搜索推荐 算法
计数排序(Counting Sort)详解
计数排序(Counting Sort)是一种非比较排序算法,其核心思想是通过计数每个元素的出现次数来进行排序,适用于整数或有限范围内的非负整数排序。这个算法的特点是速度快且稳定,适用于某些特定场景。在本文中,我们将深入探讨计数排序的原理、步骤以及性能分析。
287 1
计数排序(Counting Sort)详解
|
算法 搜索推荐
经典算法之折半插入排序(Binary Insertion Sort)
经典算法之折半插入排序(Binary Insertion Sort)
349 0
2-路插入排序(Two-Way Insertion Sort)
算法介绍 算法描述 算法分析 代码实现 参考
|
搜索推荐 算法 数据可视化
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)
124 0
|
算法 Python
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree
LeetCode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree