python实现冒泡排序、快速排序

简介: python实现冒泡排序、快速排序

1、冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。拿第一个和第二个进行相比,谁大就往后放。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。

def bubble_sort(array):
    for i in range(len(array) - 1):
        swap = False #为假,没有拍好序
        for j in range(len(array) - 1 - i):
            if array[j] > array[j + 1]:
                array[j], array[j + 1] = array[j + 1], array[j]
                swap = True
        if not swap:
            break
    return array
array = [100, 59, 20, 122, 10]
print(bubble_sort(array))

2 、快速排序

快速排序:不稳定的排序、基准值越小,时间复杂度越高。尽可能取中间值。

先从数列中取出一个数作为基准数。

分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

再对左右区间重复第二步,直到各区间只有一个数。

方式一:相比简单易理解。取最后一个作为基准数。

def quick_sort(lst):
    if len(lst) <= 1:
        return lst
    # 左子数组
    left = []
    # 右子数组
    right = []
    # 基准数  -- 取最后一个
    base = lst.pop()
    # 对原数组进行划分,小于基准数的放左边,大于等于基准数的放右边
    for i in lst:
        if i < base:
            left.append(i)
        else:
            right.append(i)
    # 递归调用
    return quick_sort(left) + [base] + quick_sort(right)
lst2 = [22, 58, 10, 66, 0, 6, 89, 98, 18, 39, 45, 76]
print(quick_sort(lst2)

方式二:以数组的第一个作为基准数,相比之下可能会有点复杂

def QuickSort(num):
    if len(num) <= 1: #边界条件
        return num
    key = num[0] #取数组的第一个数为基准数
    list = [] #定义空列表,分别存储小于/大于/等于基准数的元素
    right = []
    key1 = [key]
    for i in range(1,len(num)):#遍历数组,把元素归类到3个列表中
        # print(i)
        if num[i] > key:
            right.append(num[i])
        elif num[i] < key:
            list.append(num[i])
        else:
            key1.append(num[i])
    return QuickSort(list)+key1+QuickSort(right) #对左右子列表快排,拼接3个列表并返回
nums = [5,32,56,42,1,2,83,100]
print(QuickSort(nums))


相关文章
|
26天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
126 67
|
26天前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
118 61
|
1月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
本文介绍了 Python 中的快速排序算法,从基本原理、实现代码到优化方法进行了详细探讨。快速排序采用分治策略,通过选择基准元素将数组分为两部分,递归排序。文章还对比了快速排序与冒泡排序的性能,展示了优化前后快速排序的差异。通过这些分析,帮助读者理解快速排序的优势及优化的重要性,从而在实际应用中选择合适的排序算法和优化策略,提升程序性能。
43 1
|
4月前
|
搜索推荐 Python
Python基础编程:冒泡排序和选择排序的另一种while循环实现
这篇文章介绍了Python中冒泡排序和选择排序的实现,提供了使用while循环的替代方法,并展示了排序算法的运行结果。
39 2
Python基础编程:冒泡排序和选择排序的另一种while循环实现
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
35 0
|
5月前
|
搜索推荐 Python
快速排序:Python 中的速度之王,揭秘它的递归魔法与性能极限!
【7月更文挑战第12天】快速排序**是高效排序算法,基于分治策略。它选择基准值,将数组分成小于和大于基准的两部分,递归地对两部分排序。
67 6
|
5月前
|
搜索推荐 Python
快速排序的 Python 实践:从原理到优化,打造你的排序利器!
【7月更文挑战第12天】Python的快速排序**以分治策略实现高效排序,平均时间复杂度$O(nlogn)$,优于$O(n^2)$的冒泡排序。基本实现通过选取基准元素分割数组,然后递归排序两部分。优化版使用随机基准避免最坏情况。对比显示优化后排序更稳定,适应不同数据集,提升程序性能。
66 4
|
5月前
|
算法 搜索推荐 编译器
算法高手养成记:Python快速排序的深度优化与实战案例分析
【7月更文挑战第11天】快速排序是编程基础,以O(n log n)时间复杂度和原址排序著称。其核心是“分而治之”,通过选择基准元素分割数组并递归排序两部分。优化包括:选择中位数作基准、尾递归优化、小数组用简单排序。以下是一个考虑优化的Python实现片段,展示了随机基准选择。通过实践和优化,能提升算法技能。**
66 3
|
6月前
|
搜索推荐 算法 Python
Python教程:使用Python实现冒泡排序和快速排序
排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。
71 3
|
6月前
|
Python
【Python 训练营】N_17 冒泡排序
【Python 训练营】N_17 冒泡排序
31 2