美文网首页
python的一些基本排序算法

python的一些基本排序算法

作者: Ghibli_Someday | 来源:发表于2018-10-12 00:50 被阅读13次

1、插入排序

工作原理:通过构建有序序列,对于未排序数据,在已排序序列中,从后向前扫描,找到相应位置并插入。
插入排序是最重要的简单排序方法,原因:

  • 实现简单
  • 自然的稳定性和适应性
def insert_sort(L):
    for i in range(1, len(L)):
        # 从第i个元素开始向前比较,如果小于前一个元素,交换位置
        for j in range(i, 0, -1):
            if L[j] < L[j-1]:
                L[j], L[j-1] = L[j-1], L[j]
    return L

2、选择排序

工作原理:在未排序序列中找到最小元素,放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,放到已排序序列的末尾。
选择排序比较低效,因为每次选择一个元素,都是从头开始做一遍完全的比较,在整个排序中做了很多重复的工作。

def select_sort(L):
    for i in range(len(L)-1):
        k = i
        for j in range(i, len(L)):  # k是已知最小元素的位置
            if L[j] < L[k]:
                k = j
            if i != k:  # L[k]是确定的最小元素,检查是否需要交换
                L[i], L[k] = L[k], L[i]
    return L

3、冒泡排序

冒泡排序是一种典型的通过交换元素消除逆序实现排序的方法,基本操作是反复比较和交换。

def bubble_sort(L):
    for i in range(len(L)):
        for j in range(1, len(L)):
            if L[j-1] > L[j]:
                L[j-1], L[j] = L[j], L[j-1]
    return L

改进版本
增加了一个Nfound来标记是否存在逆序,如果不存在立即结束循环,可能提高效率

def bubble_sort(L):
    for i in range(len(L)):
        Nfound = True
        for j in range(1, len(L)):
            if L[j-1] > L[j]:
                L[j], L[j-1] = L[j-1], L[j]
                Nfound = False
        if Nfound:
            break
    return L

4、快速排序

快速排序是一种著名的排序算法,采用了递归方式,是实践中平均速度最快的算法之一。

def quick_sort(L, l, r):
    # l即left,左索引,r即right,右索引
    if l >= r:
        return
    i = l
    j = r
    pivot = L[i]
    # while将大于中枢值pivot的元素放在其右边,小于其的放在左边
    while i < j:
        while i < j and L[j] >= pivot:
            j -= 1
        if i < j:
            L[i] = L[j]
            i += 1
        while i < j and L[i] <= pivot:
            i += 1
        if i < j:
            L[j] = L[i]
    L[i] = pivot
    # 划分的区域继续进行此逻辑,直到所有的区域i=j
    quick_sort(L, l, i-1)
    quick_sort(L, i+1, r)
    return L

5、希尔排序

希尔排序是直接插入排序算法的一种更高效的改进版本,原理是不断将序列划切分,直到步长为1时使用简单的插入排序。

def shell_sort(L):
    n = len(L)
    step = int(n/2)
    while step > 0:
        for i in range(step, n):
            j = i
            while j >= step and L[j - step] > L[j]:
                L[j - step], L[j] = L[j], L[j - step]
                j -= step
        step = int(step/2)
    return L

6、并归排序

归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。

def merge_sort(L):
    if len(L) <= 1:
        return L
    # 二分分解
    num = int(len(L) / 2)
    left = merge_sort(L[:num])
    right = merge_sort(L[num:])
    # 合并
    return merge(left, right)


def merge(left, right):
    """合并操作,将两个有序数组left[]和right[]合并成一个大的有序数组"""
    # left与right的下标指针
    l, r = 0, 0
    result = []
    while l < len(left) and r < len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result

相关文章

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • python实现冒泡排序(BubbleSort)

    python实现【冒泡排序】 算法原理介绍 冒泡排序是一种简单的排序算法。它的基本原理思想是重复地走访过要排序的数...

  • Python编程学习如何实现排序算法

    Python如何实现排序算法?怎么学好Python编程?排序算法可以说是程序员必备的一项基本功,解决实际问题中会经...

  • python的一些基本排序算法

    1、插入排序 工作原理:通过构建有序序列,对于未排序数据,在已排序序列中,从后向前扫描,找到相应位置并插入。插入排...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 排序算法最强总结及其代码实现(Python/Java)

    前言 本文总结了常用的全部排序算法,内容包括: 排序算法的定义和思路 排序算法的代码实现:Python和Java,...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • python与基本排序算法

    1. 简介 排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

网友评论

      本文标题:python的一些基本排序算法

      本文链接:https://www.haomeiwen.com/subject/vtfwaftx.html