目 录CONTENT

文章目录

Python版冒泡排序和快速排序

Violet
2023-07-30 / 0 评论 / 0 点赞 / 50 阅读 / 1729 字

分享两个之前写出来的Demo代码,另外分享一个视频,图示化展示了排序的过程,觉得挺有帮助的

冒泡排序

def bubble_sort(arr):
    length = len(arr)

    for i in range(length):
        stop = False
        for j in range(0, length - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                stop = True
        if not stop:
            break
    return arr


# 在这个冒泡排序的实现中,我们通过比较相邻元素,如果前一个元素大于后一个元素,则交换它们的位置。外层循环控制排序的趟数,内层循环控制每一趟中的比较次数。通过这样的比较和交换操作,较大的元素会逐渐"浮"到数组的末尾,从而实现排序。
# 需要注意的是,冒泡排序是一种简单但效率较低的排序算法,它的时间复杂度为O(n^2),其中n是数组的长度。对于较大规模的数组,其他更高效的排序算法(如快速排序、归并排序等)可能更为适合。
if __name__ == '__main__':
    aa = [1, 53, 12, 11, 23, 45, 80, 66]
    print(bubble_sort(aa))

快速排序

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

    return quick_sort(left) + middle + quick_sort(right)


# 示例
# 在这个快速排序的实现中,我们首先选择数组中的一个元素作为“pivot”(枢纽元素),然后将数组分成三个部分:小于pivot的元素构成一个子数组left,等于pivot的元素构成一个子数组middle,大于pivot的元素构成一个子数组right。
# 然后,分别对左右两个子数组进行递归排序,并最终将排序好的left、middle和right拼接在一起,得到最终的有序数组。
# 快速排序的时间复杂度通常是O(n log n),其中n是数组的长度。它是一种高效的排序算法,适用于大规模数据的排序。
if __name__ == '__main__':
    input_list = [64, 34, 25, 12, 22, 11, 90]
    sorted_list = quick_sort(input_list)
    print("排序后的数组:", sorted_list)
0

评论区