QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1608|回复: 0
打印 上一主题 下一主题

Python实现快速排序和插入排序算法及自定义排序的示例

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-4-12 11:41 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    Python实现快速排序和插入排序算法及自定义排序的示例  j3 O; j( W+ K% n: W
    这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下& a2 X! b% }, T2 z$ I+ k
    一、快速排序( \& T* Y9 ~6 F% J0 K9 D) L

    + q2 ?" ]! l6 T2 b3 f快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。  c7 I! \- Z  ]( I  A& z) b
    $ u: o8 r* A/ [. M( |' \4 t
    快速排序,递归实现3 w2 K7 x( R0 L  R1 D1 \" |' q

    4 g6 L7 T% u! g% M4 O5 ]$ N2 ^# j    def quick_sort(num_list):
    5 @5 J9 M" F& T8 m  ~5 ]  _- |; p  """# R7 x8 n% X- s+ ^& B( W5 ~* ~
      快速排序
    5 X& t" y- F$ D, ?5 A' P  A( q  """
    ( Y8 p* A8 d+ X  if num_list == []:
    8 g  g' h9 J( H1 L    return num_list
    , U5 S( g" Q; ?( r$ D  smallList = []) G+ r- L" S+ x4 `# j6 a. ]; k
      bigList = []
    / w5 e- n$ [+ S  middleElement = num_list[0]
    % y: {+ V/ _, J; P4 q& Z  for i in num_list[1:]:3 s, |8 A( X7 ]5 l1 V* E3 X
        if i <= middleElement:
      T* o, h1 z9 W- l      smallList.append(i)
      i+ e8 z1 e7 x9 v    else:4 c/ i6 O1 e: l; u8 t: Y' C
          bigList.append(i)
    ' f# k0 Y0 l: L2 E% n; E  return quick_sort(smallList)+[middleElement]+quick_sort(bigList)$ g# z1 ?9 _: r
    4 \! j  e3 {8 n, I6 m- C6 p  E
    4 @% H, i3 S% a+ P- C
    插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。5 D: N, g/ W& K3 u
    : n( N+ g( i0 t
    插入排序
    : O1 P  i% ], w" A
    ! V% w, |# I! d4 U0 W# @
    : c# L" x2 P1 v7 ^: idef insert_sort(num_list):* z# d2 a, G0 A4 d* D
      """
    4 d/ h, ^$ p9 n  插入排序5 L1 s3 I9 l) P8 X7 w% D! z
      """
    + R6 F, r% C, B- |  for i in range(len(num_list)-1):
    ) O) t# U/ }$ D    for j in range(i+1, len(num_list)):
    ! U; J* H5 c$ n0 F. S( {      if num_list>num_list[j]:0 ]4 h: A0 Y) G  C7 f
            num_list,num_list[j] = num_list[j],num_list
    $ W/ P& ~' U) w+ S5 s  return num_list" W5 |! k" `" O$ T; U* D; D
    3 N5 i4 c) I9 D

    $ l4 q# ]/ u# V三、自定义排序- o, Z, r- C1 W3 I) ~" h% B
    利用 sort() 或 sorted() 的 key 即可实现。+ [2 W, i$ M' T/ I
    def sort_key(obj):- c6 [( K9 R, {7 }
      sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]& G0 U% k1 F2 O: |& w4 x4 h
      return sorted_list.index(obj): |% g0 y- X7 w+ P9 c

    * l3 N/ C1 Y( O. @) X0 u/ U- _0 x; ?3 M5 l+ D
    if __name__ == '__main__':+ ^- ^: W8 V0 n+ w& \
      print sorted(range(10), key=sort_key)
      N* X3 t: s+ B/ ~( h8 b
    # x% B$ q# Z5 M: ]0 s9 \$ Y" y# 输出结果如下
    : S* Q, q1 V4 V$ i6 m3 {! }( v[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
    2 Z  @2 x. N; {( w6 g1 n, U, y2 M
    / X/ f2 _9 o2 l2 F0 b! W: k/ z
    - O; d. Y; }; v9 t# Y非常感谢你的阅读5 V8 F6 F' Q( J# L
    大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是1 N" `+ w2 q" E4 z, A
    没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
    9 m7 h2 ^2 y7 Q  j  g& I其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!
    ) \. j/ `5 R0 I3 {4 o————————————————
    ; U/ i6 l# ~0 i! E2 [版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    $ J( w) Y- f2 f原文链接:https://blog.csdn.net/chengxun03/article/details/105460563
    ; P9 U- A& j: ^, p7 }7 O" [1 |. R: Z; W* G( L& z3 D8 L& k
    6 u2 _2 c$ z2 C  f# ^: _' F8 s
      f+ Z2 }7 s: _# C% V
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-10 05:50 , Processed in 0.558470 second(s), 51 queries .

    回顶部