python的排序的方法有很多种,常见的有桶排序、冒泡排序、快速排序这三种

桶排序

首先讲一下桶排序,桶排序顾名思义用桶来排序,当然不是家用的桶,用的是容器型数据来进行储存,桶排序的想法是进行规划范围来进行创建容器型数据,比如说规划0-100的范围内来进行创建,他就会创建一百个容器,一个容器对应一个数据
就比如创建a列表
a = [3,4,2,7,43,43,51,78,22]

像这样的算法是花费空间较大的,可以进行规划范围来进行排序会节省一些资源

代码如下

def bucket_sort_simplify(arr, max_num):
    buf = {i: [] for i in range(int(max_num)+1)}  # 不能使用[[]]*(max+1),这样新建的空间中各个[]是共享内存的
    arr_len = len(arr)
    for i in range(arr_len):
        num = arr[i]
        buf[int(num)].append(num)  # 将相应范围内的数据加入到[]中
    arr = []
    for i in range(len(buf)):
        if buf[i]:
            arr.extend(sorted(buf[i]))  # 这里还需要对一个范围内的数据进行排序,然后再进行输出
    return arr

if __name__ == "__main__":
    lis = [3.1, 4.2, 3.3, 3.5, 2.2, 2.7, 2.9, 2.1, 1.55, 4.456, 6.12, 5.2, 5.33, 6.0, 2.12]
    print(bucket_sort_simplify(lis, max(lis)))

冒泡排序

冒泡排序的方式就是不停的和身边的元素进行对比来判断是否需要交换位置,这种方法就会很容易理解

和桶排序相比这种方法更加节省空间

代码如下

def bubbleSort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # 最后i个元素已经确定了位置
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]

arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(arr)
print ("排序后的数组:")
for i in range(len(arr)):
    print ("%d" %arr[i]),

快速排序

所谓的快速排序就是更快的进行排序,它的思想说简单不简单说难也不难,下面看一下理论知识
快速排序会在一个容器型数据类型中踢出一个元素作为基数(通常是开头和尾部),将基数和其他的数进行对比如果比基数大的话,放在一个容器中,如果比基数小的话放在一个容器中,对比完了之后基数的位置就确定了,然后用同样的方法来将两个存放大的和小的容器在进行对比一直有序为止
如图

代码如下

def partition(arr,low,high): 
    i = ( low-1 )         # 最小元素索引
    pivot = arr[high]     
  
    for j in range(low , high): 
  
        # 当前元素小于或等于 pivot 
        if   arr[j] <= pivot: 
          
            i = i+1 
            arr[i],arr[j] = arr[j],arr[i] 
  
    arr[i+1],arr[high] = arr[high],arr[i+1] 
    return ( i+1 ) 
  
 
# arr[] --> 排序数组
# low  --> 起始索引
# high  --> 结束索引
  
# 快速排序函数
def quickSort(arr,low,high): 
    if low < high: 
  
        pi = partition(arr,low,high) 
  
        quickSort(arr, low, pi-1) 
        quickSort(arr, pi+1, high) 
  
arr = [10, 7, 8, 9, 1, 5] 
n = len(arr) 
quickSort(arr,0,n-1) 
print ("排序后的数组:") 
for i in range(n): 
    print ("%d" %arr[i]),

posted on 2022-03-30 16:29  一纸荒年003  阅读(232)  评论(0)    收藏  举报