【菜鸟笔记|算法导论】十大排序算法总结与python实现

算法导论中提到了七种排序算法,再加上冒泡排序、选择排序、希尔排序,构成我们常说的十大排序算法。其中冒泡、选择、插入、希尔、归并、堆、快速排序都是比较排序算法(即通过对元素进行大小比较来确定顺序);计数、基数、桶排序都是非比较排序算法。十大排序算法的性能比较如下表:
【菜鸟笔记|算法导论】十大排序算法总结与python实现_第1张图片
下面将简单描述十大排序算法的原理,并分别用python实现。笔记自用就不附原理图了,如果对原理有疑问请参阅算法导论那本书,里面算法运行过程图解是非常清楚的。

1.冒泡排序

比较相邻两个数,若前面的数比后面的数大,则交换位置。每一轮最大的数沉底,越小的数就能逐渐换到数组的前面,就像冒泡一样,因此称为冒泡排序。

def BubbleSort(a):
    n=len(a)
    for i in range(n):
        for j in range(n-i-1):
            if a[j]>a[j+1]:
                a[j],a[j+1]=a[j+1],a[j]

2.选择排序

遍历数组,找到最小值,交换最小值和第一个数的位置。然后从第二个数开始遍历,以此类推。

def SelectionSort(a):
    n=len(a)
    for i in range(n):
        min=i
        for j in range(i+1,n):
            if a[j]<a[min]:
                min=j
        a[i],a[min]=a[min],a[i]

3.插入排序

(书2.1节,9页开始)插入排序很像排序扑克牌。拿到一张牌,与前面的牌比较,插入合适的位置,这个位置原来的牌后移。但是每次只移动一位。

def InsertionSort(a):
    n=len(a)
    for j in range(1,n):
        key=a[j]
        i=j-1
        while i>=0 and a[

你可能感兴趣的:(算法,排序算法)