📜  数据结构-排序技术(1)

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

数据结构-排序技术

在计算机程序中,排序技术是一种非常重要的技术,尤其是在处理大规模数据时。排序技术是将一组数据按照一定规则进行排列的一种方法,我们通常说的排序,主要指的是将数据按照从小到大或从大到小的顺序排列。

排序技术有很多种,每一种排序算法都有其优点和缺点。下面我会依次介绍常见的六种排序算法及其实现过程。

冒泡排序

冒泡排序是一种基础的排序算法,该算法重复地遍历序列,一次比较相邻两个元素,如果它们的顺序错误就将它们交换过来。遍历序列的工作是重复进行的,直到序列有序为止。

下面是冒泡排序的 Python 代码实现:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
选择排序

选择排序是一种简单直观,易于实现的排序算法。该算法首先在未排序的数列中找到最小元素,存放到排序序列的起始位置;然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

下面是选择排序的 Python 代码实现:

def select_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr
插入排序

插入排序是一种简单直观,易于实现的排序算法。该算法先将序列中的第一个元素看做是一个有序的子序列,然后从第二个元素开始,逐个将其插入到已排序子序列的适当位置,使之成为一个新的有序子序列。

下面是插入排序的 Python 代码实现:

def insert_sort(arr):
    n = len(arr)
    for i in range(1, n):
        cur_val = arr[i]
        j = i-1
        while j >=0 and arr[j] > cur_val:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = cur_val
    return arr
希尔排序

希尔排序是插入排序的一种高效的改进算法。该算法先将序列分为若干个子序列,对每个子序列进行插入排序,然后逐步缩小子序列的长度,对缩小后的子序列重新进行插入排序,直到子序列长度为 1 时停止,整个排序过程结束。

下面是希尔排序的 Python 代码实现:

def shell_sort(arr):
    n = len(arr)
    gap = n // 2
    while gap > 0:
        for i in range(gap, n):
            j = i
            cur_val = arr[i]
            while j>=gap and arr[j-gap] > cur_val:
                arr[j] = arr[j-gap]
                j -= gap
            arr[j] = cur_val
        gap //= 2
    return arr
归并排序

归并排序是一种基于分治思想的排序算法,该算法将待排序序列分为若干个子序列,对每个子序列进行排序,然后将已排序的子序列合并成一个序列。该算法具有稳定性且时间复杂度为 O(nlogn),是一种非常高效并且实用的排序算法。

下面是归并排序的 Python 代码实现:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)

def merge(left, right):
    res = []
    i, j = 0, 0
    while i<len(left) and j<len(right):
        if left[i]<=right[j]:
            res.append(left[i])
            i += 1
        else:
            res.append(right[j])
            j += 1
    res += left[i:]
    res += right[j:]
    return res
快速排序

快速排序是一种基于分治思想的排序算法,该算法把待排序的序列分为若干个子序列,对每个子序列进行排序,然后将已排序的子序列合并成一个序列。该算法具有稳定性且时间复杂度为 O(nlogn),是一种非常高效并且实用的排序算法。

下面是快速排序的 Python 代码实现:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr.pop()
    left, right = [], []
    for i in arr:
        if i < pivot:
            left.append(i)
        else:
            right.append(i)
    return quick_sort(left) + [pivot] + quick_sort(right)

以上就是常见的六种排序算法及其 Python 代码实现。在实际开发中,我们可以根据具体应用场景选择合适的排序算法来进行排序,从而提高程序运行效率。