📜  DAA-插入排序(1)

📅  最后修改于: 2023-12-03 15:00:19.686000             🧑  作者: Mango

DAA-插入排序

插入排序是一种基础的排序算法,其时间复杂度为O(n^2),具体实现方式分为两种:直接插入排序和折半插入排序。

DAA-插入排序是一种改进的插入排序算法,其核心思想是将待排序数组分成若干个有序子数组,在保持有序的前提下,不断将剩余元素插入到有序子数组中,最终将所有元素有序排列。

算法步骤
  1. 将待排序数组分成若干个有序子数组,通常是将数组中相邻的元素分为一组。

  2. 在保持前面的子数组有序的情况下,将第i+1个元素插入到前面子数组中,并使插入后的子数组仍保持有序。

  3. 重复第2步,直到将所有元素插入到有序子数组中。

代码实现

DAA-插入排序的实现过程类似于直接插入排序,只不过在插入元素时采用了二分查找的方式,以加速插入过程。以下是DAA-插入排序的python实现代码:

def daa_insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        j = i
        low, high = 0, j - 1
        while low <= high:
            mid = (low + high) // 2
            if arr[j] < arr[mid]:
                high = mid - 1
            else:
                low = mid + 1
        while j > low:
            arr[j], arr[j-1] = arr[j-1], arr[j]
            j -= 1
    return arr
性能分析

DAA-插入排序的时间复杂度同样为O(n^2),但在实践中其平均运行时间较直接插入排序表现更好,在一定范围内具有一定的优越性。DAA-插入排序的空间复杂度为O(1),不需要额外的空间存储中间结果。