八大排序算法使用python实现

这个以前写的,代码已经丢失,待从新写好代码后补上。python

1、冒泡排序算法

冒泡排序算法的运做以下:数组

比较相邻的元素。若是第一个比第二个大,就交换他们两个。
对每一对相邻元素做一样的工做,从开始第一对到结尾的最后一对。这步作完后,最后的元素会是最大的数。
针对全部的元素重复以上的步骤,除了最后一个。
持续每次对愈来愈少的元素重复上面的步骤,直到没有任何一对数字须要比较。
以上节选自维基百科app

代码实现less

2、选择排序性能

选择排序(Selection sort)是一种简单直观的排序算法。它的工做原理以下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而后,再从剩余未排序元素中继续寻找最小(大)元素,而后放到已排序序列的末尾。以此类推,直到全部元素均排序完毕。ui

以上节选自维基百科code

代码实现:排序

def findSmallest(arr):  # 用于查找出数组中最小的元素,返回最小元素的索引。
    smallest = arr[0]
    smallest_index = 0
    for i in range(1, len(arr)):
        if smallest > arr[i]:
            smallest = arr[i]
            smallest_index = i
    return smallest_index

def selectSort(arr):
    newArr = []
    while arr:
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest))
    return newArr

3、插入排序递归

步骤以下

从第一个元素开始,该元素能够认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
若是该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
以上节选自维基百科

代码实现

def insert_sort(data):
    for k in range(1, len(data)):
        cur = data[k]
        j = k
        while j > 0 and data[j - 1] > cur:
            data[j] = data[j - 1]
            j -= 1
        data[j] = cur
    return data

4、希尔排序

希尔排序经过将比较的所有元素分为几个区域来提高插入排序的性能。这样可让一个元素能够一次性地朝最终位置前进一大步。而后算法再取愈来愈小的步长进行排序,算法的最后一步就是普通的插入排序,可是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。

以上节选自维基百科

代码实现

5、归并排序

原理以下(假设序列共有{displaystyle n}个元素):

将序列每相邻两个数字进行归并操做,造成{displaystyle ceil(n/2)}个序列,排序后每一个序列包含两/一个元素
若此时序列数不是1个则将上述序列再次归并,造成{displaystyle ceil(n/4)}个序列,每一个序列包含四/三个元素
重复步骤2,直到全部元素排序完毕,即序列数为1
以上节选自维基百科

代码以下

6、快速排序

从数列中挑出一个元素,称为“基准”(pivot),
从新排序数列,全部比基准值小的元素摆放在基准前面,全部比基准值大的元素摆在基准后面(相同的数能够到任何一边)。在这个分割结束以后,该基准就处于数列的中间位置。这个称为分割(partition)操做。
递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归到最底部时,数列的大小是零或一,也就是已经排序好了。这个算法必定会结束,由于在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

以上节选自维基百科

代码以下:

def quick_sort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0]
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)


array = [2, 5, 6, 2, 1]
print(quick_sort(array))

7、堆排序

若以升序排序说明,把数组转换成最大堆积(Max-Heap Heap),这是一种知足最大堆积性质(Max-Heap Property)的二叉树:对于除了根以外的每一个节点i, A[parent(i)] ≥ A[i]。

重复从最大堆积取出数值最大的结点(把根结点和最后一个结点交换,把交换后的最后一个结点移出堆),并让残余的堆积维持最大堆积性质。

8、计数排序

以上节选自维基百科

代码以下

本文章参考维基百科和八大排序算法python实现合辑

相关文章
相关标签/搜索