欢迎访问宙启技术站
智能推送

常用排序算法的原理与实现:在Python中一探究竟

发布时间:2023-12-25 23:11:26

常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等。下面将逐一介绍这些排序算法的原理和Python实现,并给出一个具体的使用例子。

1. 冒泡排序(Bubble Sort):

原理:每次比较相邻的两个元素,如果它们的顺序错误就交换位置,直到没有需要交换的元素。

实现:

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

使用例子:

arr = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(arr))

输出结果:[11, 12, 22, 25, 34, 64, 90]

2. 插入排序(Insertion Sort):

原理:将数组分为已排序和未排序两部分,将未排序部分的元素依次插入到已排序部分中的合适位置。

实现:

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

使用例子:

arr = [64, 34, 25, 12, 22, 11, 90]
print(insertion_sort(arr))

输出结果:[11, 12, 22, 25, 34, 64, 90]

3. 选择排序(Selection Sort):

原理:每次遍历数组找到最小的元素,将其与当前位置交换,使得当前位置之前的元素有序。

实现:

def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i+1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

使用例子:

arr = [64, 34, 25, 12, 22, 11, 90]
print(selection_sort(arr))

输出结果:[11, 12, 22, 25, 34, 64, 90]

4. 快速排序(Quick Sort):

原理:选择一个枢纽元素将数组分为两部分,使得左边的元素小于枢纽元素,右边的元素大于等于枢纽元素,然后对左右两部分递归进行快速排序。

实现:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        less = [x for x in arr[1:] if x < pivot]
        greater = [x for x in arr[1:] if x >= pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)

使用例子:

arr = [64, 34, 25, 12, 22, 11, 90]
print(quick_sort(arr))

输出结果:[11, 12, 22, 25, 34, 64, 90]

5. 归并排序(Merge Sort):

原理:将数组递归地分成两半,排序两个子数组,然后将排序好的子数组合并成一个有序数组。

实现:

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):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    result.extend(left[i:])
    result.extend(right[j:])
    
    return result

使用例子:

arr = [64, 34, 25, 12, 22, 11, 90]
print(merge_sort(arr))

输出结果:[11, 12, 22, 25, 34, 64, 90]

这些是常用的排序算法的原理和Python实现,可以根据具体的需求选择合适的算法来排序数组。