数学建模社区-数学中国
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
[打印本页]
作者:
杨利霞
时间:
2020-4-12 11:41
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
Python实现快速排序和插入排序算法及自定义排序的示例
% o- M4 Y9 X3 s8 Q- @5 n# ]4 @" P8 A; m
这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
' Q* m- h5 r$ \. ?
一、快速排序
; O5 p' n2 N% N R5 C5 |1 a* a3 [. }
& H4 b! h \5 F2 x
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
0 w$ P# R, ?, L: M% R
" d! Y& p, `+ b
快速排序,递归实现
) E; U9 i; a8 u5 ^
* r* a" O% y: }7 L' P! h8 _
def quick_sort(num_list):
9 A, m1 I8 V4 ^4 F
"""
' \2 }( P$ ~: i8 p
快速排序
' E( M/ e( |" q; s0 r( _2 \3 w
"""
: z& Y- i" c& T" U4 S
if num_list == []:
2 {2 D6 u; A) `- u
return num_list
: q8 L* y4 _7 n, Z; L' z% Z
smallList = []
* F4 O$ ]' }+ H3 I+ a
bigList = []
' C8 I9 o1 i6 z
middleElement = num_list[0]
- H" ~% |! H; h, q! [
for i in num_list[1:]:
, l g: \+ D7 t- r
if i <= middleElement:
* ]/ A9 ^+ G1 V' i' Q
smallList.append(i)
5 Q' V. p: w% O1 a
else:
) }; P5 m$ n5 |5 a
bigList.append(i)
8 [) w# [3 O0 ^/ V& n. [# ~
return quick_sort(smallList)+[middleElement]+quick_sort(bigList)
1 \: ~* t" g* ?$ j/ k1 {( i4 J6 p
0 v2 W" b) h1 H: u8 a: {
# q( Y; E5 r2 w+ \ z9 o8 s- w( D
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
8 b6 ?' ~& U- G
6 O9 M/ |# f# Y6 c. y
插入排序
N$ k5 T* t0 J, L4 U( ]3 r8 j' |
* B+ T# i# s2 o9 H! S0 H
5 ]6 ]( c9 G( o- [. m2 M
def insert_sort(num_list):
0 R6 }( }# {2 ?4 {
"""
3 a# G9 | R4 [+ P( o
插入排序
( d$ ^8 K3 }: _ G9 \. Y+ a
"""
1 O8 h5 O4 D; u8 M
for i in range(len(num_list)-1):
( r/ G }4 Z/ F
for j in range(i+1, len(num_list)):
: P6 L6 S4 [& J* a4 U
if num_list
>num_list[j]:
9 q1 Z, x; {) E! j: |. o, {4 \% v
num_list
,num_list[j] = num_list[j],num_list
0 v. a2 q1 |0 G5 S. F
return num_list
) f: z; M" C# |3 F: P
" ?7 y4 ?* v# j* f
8 x* V7 J$ `; k# t& \; H
三、自定义排序
3 o9 Q) Y6 O( c% v5 ]
利用 sort() 或 sorted() 的 key 即可实现。
* Q# P7 l7 ^% i* j* i. _4 C
def sort_key(obj):
2 |. E& r' t" ?) c6 U
sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
3 c( s6 Z3 L# E
return sorted_list.index(obj)
' _: W% S! ?* ^, k2 f# N* Z4 `
; o3 \+ \( w3 w& ]4 g8 h
' z4 B9 i: r7 M& u
if __name__ == '__main__':
5 _) b b9 |/ _
print sorted(range(10), key=sort_key)
% F. {' s4 m7 m, ~$ u( l8 V
& B A G3 a6 q. X( t3 T8 I
# 输出结果如下
3 O" r! B9 h6 L! N
[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
$ |" L# y, h" T9 L x
0 r6 u" [6 y" o* Y6 _. s% n9 I
& l. F4 H7 |; t% F
非常感谢你的阅读
; p! Y8 y6 w6 U4 N y3 [$ i: }8 O
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
* a0 r) ?6 N! g
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
9 v2 W5 k/ T+ O9 Q% r$ _3 ]
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!
9 i3 d; n# t* a9 |% k2 _& L
————————————————
, |- g* c# j0 s0 m' K( @0 G
版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
' m0 s0 }/ b/ L) P
原文链接:https://blog.csdn.net/chengxun03/article/details/105460563
$ b: `5 ?+ T" v" V* F
% I: q' t7 h f8 E5 G$ Q
, L6 F& _8 ~! s+ @/ A3 ?% V6 I6 M
) i7 u% B% _. i3 L3 P5 M
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5