python-经典排序算法总结

1、冒泡排序 (Bubble Sort):

  • 基本思想:通过不断交换相邻元素将最大的元素逐步移动到数组的末尾。

  • 时间复杂度:平均和最坏情况都是O(n^2)。

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

2、插入排序 (Insertion Sort):

  • 基本思想:通过构建有序序列,逐个将元素插入到已排好序的部分。

  • 1.从第一个元素开始,该元素可以认为已经被排序
    2.取下一个元素A,从已排序的元素序列从后往前扫描
    3.如果该元素大于A,则将该元素移到下一位
    4.重复步骤3,直到找到已排序元素中小于等于A的元素
    5.tem插入到该元素的后面,如果已排序所有元素都大于A,则将A插入到下标为0的位置
    6.重复步骤2~5
     

  • 时间复杂度:平均和最坏情况都是O(n^2),最好情况是O(n)。

  • 实现:

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

3、选择排序 (Selection Sort):

  • 基本思想:通过不断选择未排序部分的最小元素,放到已排序部分的末尾。

  • 时间复杂度:平均、最坏和最好情况都是O(n^2)。

  • 实现:

  • def selection_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]
     

4、归并排序 (Merge Sort):

  • 基本思想:将数组递归地分成两半,对每一半进行排序,然后合并已排序的两半。

  • 时间复杂度:平均、最坏和最好情况都是O(n log n)。

  • 实现:

  • def merge_sort(arr):
        if len(arr) > 1:
            mid = len(arr) // 2
            left_half = arr[:mid]
            right_half = arr[mid:]

            merge_sort(left_half)
            merge_sort(right_half)

            i = j = k = 0
            while i < len(left_half) and j < len(right_half):
                if left_half[i] < right_half[j]:
                    arr[k] = left_half[i]
                    i += 1
                else:
                    arr[k] = right_half[j]
                    j += 1
                k += 1

            while i < len(left_half):
                arr[k] = left_half[i]
                i += 1
                k += 1

            while j < len(right_half):
                arr[k] = right_half[j]
                j += 1
                k += 1

5 、快速排序 (Quick Sort):

  • 基本思想:通过选择一个基准元素,将数组分为两部分,左边的元素小于基准,右边的元素大于基准,然后对左右两部分递归地进行排序。

  • 时间复杂度:平均情况是O(n log n),最坏情况是O(n^2)。

  • 实现:

  • def quick_sort(arr):
        if len(arr) <= 1:
            return arr
        
        pivot = arr[len(arr) // 2]
        left = [x for x in arr if x < pivot]
        middle = [x for x in arr if x == pivot]
        right = [x for x in arr if x > pivot]
        
        return quick_sort(left) + middle + quick_sort(right)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值