常见排序算法-选择、冒泡排序、基数排序

选择排序

选择排序是在排序过程中通过对整体的选择得到最小的元素,并把它放到所有未排序元素的最前面,不断重复,直到未排序的元素只有一个为止。

def selectSort(arr):
    for i in range(len(arr)-1):
        temp=i
        for j in range(i+1,len(arr)):
            if arr[j]<arr[temp]:
                temp=j
        if temp!=i:
            arr[i],arr[temp]=arr[temp],arr[i]

 冒泡排序

  冒泡排序是通过与相邻元素的比较和交换把的数交换到待排序元素的一个位置,不断重复该过程,直到待排序元素只剩下一个为止。

def bubbleSort(arr):
    num=len(arr)-1
    for i in range(len(arr)-1):
        temp=0
        j=0
        flag=True

        while j<(num):
            if arr[j]>arr[j+1]:
                arr[j],arr[j+1]=arr[j+1],arr[j]
                temp=j
                flag=False
            j+=1
        num=temp
        if flag:
            break

  

基数排序

  设置若干个箱子,将关键字为k的记录放入第k个箱子中,然后按序号将非空的连接。而数字是有范围的,若待排元素均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百...进行排序

  平均,最坏时间复杂度 O(k*(n+m))  k是关键字的个数,如个位、十位分别就是关键字;n是元素的个数,m是桶的个数。最好时间复杂度 O(n+m),一次分配就搞定!

import math
def radixSort(arr):
    radix=10
    k=(int(math.ceil(math.log(max(arr),10))))  #k是关键字的个数,决定循环几轮
    bucket=[[] for i in range(radix)]
    for i in range(k):
        for j in arr:   #分配
            bucket[j//(10**i)%10].append(j)
        del arr[:]
        for z in bucket:  #收集
            if len(z):
                arr+=z
                del z[:]

    return arr

  

 

猜你喜欢

转载自www.cnblogs.com/wanrongshu/p/12723316.html
今日推荐