📜  合并排序与插入排序(1)

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

合并排序与插入排序

排序算法是计算机科学中的基本问题之一。排序算法通过对数据进行重排,使得数据的顺序符合算法设计者的意图。排序算法的时间复杂度通常用Big O表示法来描述,越高效的算法复杂度越低。

以下是介绍两种排序算法:合并排序(Merge Sort)和插入排序(Insertion Sort)。

合并排序

合并排序是一种分治算法。算法首先将待排序数组划分为两个规模相等的子数组,然后对两个子数组分别进行排序,最后将两个排序好的子数组进行归并得到一个已排好序的数组。

合并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。虽然该算法速度较快,但在处理较小规模的数据时,其效率不如简单算法,例如插入排序。

下面是合并排序的实现:

def merge_sort(array):
    if len(array) < 2:
        return array
    mid = len(array) // 2
    left_array = array[:mid]
    right_array = array[mid:]
    left_array = merge_sort(left_array)
    right_array = merge_sort(right_array)
    result = []
    i = 0
    j = 0
    while i < len(left_array) and j < len(right_array):
        if left_array[i] < right_array[j]:
            result.append(left_array[i])
            i += 1
        else:
            result.append(right_array[j])
            j += 1
    result += left_array[i:]
    result += right_array[j:]
    return result
插入排序

插入排序是一种简单的排序算法。该算法通过构建有序数组,一次将未排序的元素插入到有序数组的合适位置,最终实现排序。

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。尽管算法效率较低,但它对部分已经排序的数据排序速度非常快,并且在处理较小规模的数据时具有明显的优势。

下面是插入排序的实现:

def insertion_sort(array):
    for i in range(1, len(array)):
        j = i - 1
        temp = array[i]
        while j >= 0 and array[j] > temp:
            array[j + 1] = array[j]
            j -= 1
        array[j+1] = temp
    return array

以上是合并排序与插入排序两种排序算法的介绍及实现。深入理解这些算法并掌握它们的用途可以使你更加成为一名出色的程序员。