QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1504|回复: 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实现快速排序和插入排序算法及自定义排序的示例( G& s  W5 }/ j7 m1 P
    这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
    / E" L% @# t, n: c" M7 ^一、快速排序
    ; I" p( S( H1 ]5 F9 ]
    - i1 Y! e, Z: P% _8 ~快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。% d5 y5 w/ C0 n) S
    2 Q2 v( b4 h8 g4 O
    快速排序,递归实现
    2 |. _0 N# f/ I; w' R8 ~+ Z4 S- ~/ d$ c
        def quick_sort(num_list):) x" W7 x! `( j' t' I
      """6 x4 o; D4 Z9 z, z0 h4 Q. {7 W
      快速排序
    % n" Z3 j9 d+ ^  """
    ! G% D" z8 ?" t+ ?! d6 }  if num_list == []:8 e$ {, C1 B  s4 _3 r* \! j
        return num_list# w: A" f& I( k
      smallList = []& Q2 u) [' E4 s" O
      bigList = []
    % d4 w. k. P  \; `+ s: N! k  middleElement = num_list[0]
    7 k4 G7 r7 l6 l3 c9 M* m  for i in num_list[1:]:
      M" g, Y7 [4 l, ^( g$ j$ K0 h; S    if i <= middleElement:, Y, ?  E7 }9 s6 f
          smallList.append(i)
    4 z, l6 @- g0 X7 y8 U6 o4 f    else:& T2 I7 i; r' O" ?; y
          bigList.append(i)7 ^; T; p% m* \6 s# u) Y2 H9 V
      return quick_sort(smallList)+[middleElement]+quick_sort(bigList)
    ) S% D! |- i! n% z# o' k$ d9 X8 g% o, ~+ e% }

    9 n. J2 |; B' c4 Z' J插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
    $ f2 L# i9 I0 ?5 i/ b6 o9 {% J# w' g; E2 I  p  k  Y
    插入排序" w" U& r9 D! y8 I9 u

      Z# H+ q9 v! U7 J  ~( U/ v& H4 o0 t* V* [( ]2 y, T
    def insert_sort(num_list):$ u  U6 X0 J( n
      """
      ]: Y- _1 c; i! T) C7 X) Z% _* Y  插入排序
    ) V6 l9 U  i' }) l. {1 ?0 @  """
    ' c# Y* l1 P& T  for i in range(len(num_list)-1):
    9 F- U; k$ [# P+ A7 ]    for j in range(i+1, len(num_list)):; q7 x, `# W& n) F
          if num_list>num_list[j]:
    - D5 k7 h+ e* m5 J        num_list,num_list[j] = num_list[j],num_list
    . M/ c' l% ?0 W5 I9 R9 c& s: R  return num_list$ }* C( w# Q& H9 f! s9 \
    5 U) j& O% A8 l

    5 j2 G) b; b2 r三、自定义排序
    * a: b  z) b) E' m9 _利用 sort() 或 sorted() 的 key 即可实现。
    ' {8 @) _# g! L- [% Ddef sort_key(obj):
    * U2 G  S% H7 h# L+ J* @  sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
    3 x+ Q0 I0 X5 L$ i3 g& L  return sorted_list.index(obj)
    0 y" |8 Q# `& H; C6 }, |5 W/ K5 o
    / z% o$ x- _3 ]1 Q
    . A0 G/ G3 K" Y9 Q' {7 I2 Gif __name__ == '__main__':
    ; v% y/ r  T& P+ g& I& ^) R7 H  print sorted(range(10), key=sort_key)
    ! p* ~4 t& ~' G( W$ ]4 j; Q6 F  w: z$ }) r3 G+ u; h4 W! J; \* V4 s0 w
    # 输出结果如下( t6 J7 F! ?9 l- c' q
    [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]  |* P4 l1 z+ i( }/ g$ k
    # r! m5 p3 N$ U8 v. m

    8 K* C; u! D% K4 e8 m# ?非常感谢你的阅读6 |3 a7 V3 o+ v+ q, v1 i. J7 ]
    大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
      W" w0 K+ b6 B没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
    * w5 N( j6 z& o1 ~4 Z2 V其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!8 A6 ^4 V1 o, P. E1 Q) B8 W' B5 b
    ————————————————
      Z' Q9 u: D/ h' M* k版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    ( S) S& v( X# W6 r原文链接:https://blog.csdn.net/chengxun03/article/details/105460563! l+ b! \/ l6 v

    # O6 J: ?% @/ U: V
    5 B3 ]( |/ z0 |- ~
    ) p$ n1 N; M# h
    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, 2025-12-25 13:20 , Processed in 3.284503 second(s), 50 queries .

    回顶部