Python语言基础入门之带你掌握四种 Python 排序算法
小职 2021-07-06 来源 :华为云社区 阅读 943 评论 0

摘要:本文主要介绍了Python语言基础入门之带你掌握四种 Python 排序算法,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

本文主要介绍了Python语言基础入门之带你掌握四种 Python 排序算法,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

Python语言基础入门之带你掌握四种 Python 排序算法

在编程里,排序是一个重要算法,它可以帮助我们更快、更容易地定位数据。在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的。为了保障本文的可读性,这里只着重介绍4个排序算法。

 

冒泡排序

插入排序.

归并排序.

快速排序

冒泡排序

冒泡排序是一种简单的排序算法,它比较两个相邻对象的顺序,将非预期顺序的相邻对象位置交换。下面是它的工作步骤:

 

比较第一个和第二个对象,如果第一个大于第二个,将之交换。

将第二个对象和第三个对象进行比较,检查相同条件。以此类推直到比较到数组最后一个数。

重复执行这个过程,这样数组就按照从左到右从小到大排列了。

代码如下

# Python中的冒泡排序

def bubbleSort(array):

  

  # 外循环访问数组的每个元素

  for i in range(len(array)):

 

    # 内循环将数组元素与外循环迭代元素进行比较

    for j in range(0, len(array) - i - 1):

 

      # 比较两个相邻元素

      if array[j] > array[j + 1]:

 

        # 如果元素不是预期顺序则交换元素

        temp = array[j]

        array[j] = array[j+1]

        array[j+1] = temp

data = [5, 4, 3, 2, 1]

 

bubbleSort(data)

print('Sorted Array')

print(data)

 

#output: [1, 2, 3, 4, 5]

插入排序

插入排序也很简单,它分为已经排序和未排序两部分,将未排序部分的元素选中后正确放置在排序部分即可。类似卡牌游戏时我们手里有分类卡。下面是它的工作步骤:

 

遍历数组查找最低元素的索引并将其与数组的第一个元素交换。

找到数组(不包括第一个元素)中另一个最低的元素,并将其与第二个元素交换 ,然后重复操作,直到数组的最后一个元素。

这样,数组中最低的元素都会移到左边,而最大的元素会在数组的右边,因此数组是有序的。

代码如下:

 

# Python中的排序算法

def insertionSort(array):

    for step in range(1, len(array)):

        key = array[step]

        j = step - 1

        # 将键与其左侧的每个元素进行比较,直到找到小于它的元素

        while j >= 0 and key < array[j]:

            array[j + 1] = array[j]

            j = j - 1

        # 将键放在比它小的元素之后。

        array[j + 1] = key

 

data = [11, 4, 3, 2, 12]

 

insertionSort(data)

print("sorted array")

print(data)

 

#output: [2, 3, 4, 11, 12]

归并排序

归并排序是基于分治算法原理的最常用的排序算法。我们将数组分为多个部分,然后对他们进行排序,最后将子部分合并为一个排序数组,为了更好的理解,下面是它的工作步骤:

 

把数组分成小块,直到每一块中没有单独的元素。

比较每一块数组,将最小值放在左侧,最大值放在数组的右侧。

如果觉得很难理解,看看这个动图。

代码如下:

 

# Python的归并排序

def mergeSort(array):

    if len(array) > 1:

 

        #  r 是将数组分为两半后的分割点

        r = len(array)//2

        L = array[:r]

        M = array[r:]

 

        # 通过递归方法对两半进行排序

        mergeSort(L)

        mergeSort(M)

 

        i = j = k = 0

 

        # 直到我们到达 L 或 M 的任一端,从中选择较大的元素 L 和 M 并将它们放置在 A[p 到 r] 处的正确位置

        while i < len(L) and j < len(M):

            if L[i] < M[j]:

                array[k] = L[i]

                i += 1

            else:

                array[k] = M[j]

                j += 1

            k += 1

 

        # 将L或者M里的元素排序好后,将剩余的元素并放入 A[p to r]

        while i < len(L):

            array[k] = L[i]

            i += 1

            k += 1

 

        while j < len(M):

            array[k] = M[j]

            j += 1

            k += 1

array = [8, 6, 14, 12, 10, 3]

 

mergeSort(array)

print("Sorted array: ")

print(array)

 

#output: [3, 6, 8, 10, 12, 14]

快速排序

与归并排序一样,快速排序也是基于分治算法的原理的一种排序算法。它选择一个元素作为枢轴,并围绕枢轴分区数组。下面是它的工作步骤:

 

选择一个转折点,这可以是随机选择的。这里假设我们选择数组的最后一个元素作为轴心。

将所有小于轴心的项目放在左侧,大于轴心的项目放在数组右侧。

在枢轴的左右两侧重复上面的步骤。

# Python中的快速排序

# 找到分区位置

def partition(array, lowest, highest):

 

  # 这里我们选择最右的元素作为枢轴

  pivot = array[highest]

 

  # 为最大的元素设置指针

  i = lowest - 1

  # 将每个元素与枢轴元素对比

  for j in range(lowest, highest):

    if array[j] <= pivot:

      i = i + 1

      # 将 i 处的元素与 j 处的元素交换

      (array[i], array[j]) = (array[j], array[i])

 

  # 将枢轴元素与 i 指定的较大元素交换

  (array[i + 1], array[highest]) = (array[highest], array[i + 1])

 

  # 返回分区完成的位置

  return i + 1

def quickSort(array, lowest, highest):

  if lowest < highest:

 

     # 找到枢轴元素

     # 小于枢轴的元素放左边

     # 大于枢轴的元素放右边

    pi = partition(array, lowest, highest)

 

    # 枢轴左侧的递归调用

    quickSort(array, lowest, pi - 1)

 

    # 枢轴右侧的递归调用

    quickSort(array, pi + 1, highest)

array = [9, 8, 3, 2, 1, 10, 7, 6, 19]

 

size = len(array)

quickSort(array, 0, size - 1)

print('Sorted Array is below')

print(array)

 

#output [1, 2, 3, 6, 7, 8, 9, 10, 19] 


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python语言基础入门之带你掌握四种 Python 排序算法

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved