数学建模社区-数学中国
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
[打印本页]
作者:
杨利霞
时间:
2020-4-12 11:41
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
Python实现快速排序和插入排序算法及自定义排序的示例
C/ v! O7 W0 e& x" {
这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
4 N; d F1 q9 w+ N( R, m. G+ X" E
一、快速排序
4 g( R* I) E, _$ e( E) S4 C5 @
2 H* G0 K" a/ S1 z" s* G6 U
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2 y8 e8 F" D6 C" e! X7 [
1 }9 W! k6 C1 N* B+ e
快速排序,递归实现
5 r! ^* U" E6 z
( x4 T/ A( ?6 c& P8 S u1 {8 X; U* a
def quick_sort(num_list):
# n: G# ~! @( O" g/ N
"""
( p! e: z3 u4 ~0 q: b5 q, y
快速排序
3 p2 h! ?8 o/ V) M: F7 [7 [
"""
+ A1 O6 g% S; w) C" K) d* F( p
if num_list == []:
5 G7 V6 @: j. X) n
return num_list
9 i# w8 n+ B$ l3 o8 d
smallList = []
2 e9 z9 g2 z3 E5 d# _4 M& V
bigList = []
* J! a% [ ^' E5 |- U6 T# y
middleElement = num_list[0]
0 O+ h+ p. W* c" K
for i in num_list[1:]:
s' `! a$ F& B/ `" t
if i <= middleElement:
" J4 f% k1 h/ f2 P: [" p# p. q
smallList.append(i)
; N. W3 n5 z J# H
else:
, n) q* ^" N" r' U
bigList.append(i)
}! L/ D7 v! | W' o! j$ k
return quick_sort(smallList)+[middleElement]+quick_sort(bigList)
1 h5 ]' n4 B0 _9 s8 {/ @ B
* S/ A, W3 o6 I9 U9 N7 S6 x% e
5 r5 H# h2 ^4 u( G% Y' t D, |' x! {
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
5 V2 B6 [2 w7 q' k2 I
1 `$ l; j6 P0 o6 v! T; `; l% n
插入排序
* N: H/ W3 V) @3 U
* U. t. Q9 H: S1 r5 I( k V8 w7 D
3 `4 E2 \ |* z/ i" ~2 {) H; b
def insert_sort(num_list):
. z( F# P7 k% `( W0 K
"""
7 u* ^) H: {1 N) Y8 d
插入排序
0 u5 B7 P% q, H3 {, \
"""
; X' S& a8 J. K( o& G
for i in range(len(num_list)-1):
. u- W" S- l: P( c
for j in range(i+1, len(num_list)):
: ], E& U9 _" B E/ n5 P
if num_list
>num_list[j]:
* U$ \/ j" F2 K y/ g( J
num_list
,num_list[j] = num_list[j],num_list
7 n% V4 ^4 p& \) K4 t% y5 a C8 P- a
return num_list
8 J* `9 w$ m2 e9 a; |4 [* @+ X2 h
5 ^" V2 C R. i/ f9 x' w
9 |, G- w6 T- z& _+ J
三、自定义排序
9 k( C* ?/ y& ?: @' K
利用 sort() 或 sorted() 的 key 即可实现。
g( I$ u) ]% T" N/ R5 w' T
def sort_key(obj):
6 j8 Y: v8 j; c V( `
sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
- a0 O* {; q! _
return sorted_list.index(obj)
3 @# y( A) m* D" Y( R" f1 g
$ f0 I* Y7 i: n7 O; L+ k
& _4 L( p7 ~: A$ R
if __name__ == '__main__':
) }# p p. v" [+ A2 P: Z9 c$ N$ u! i
print sorted(range(10), key=sort_key)
' b' t/ m, k0 d9 [2 G- E) B6 W5 Z
q8 r/ x& q' W/ ^
# 输出结果如下
- K* G- S3 m# ?+ ]1 N2 a: q
[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
0 H3 T; ?" M' o0 T
5 J+ t1 O9 J/ {/ U! L8 l6 \* N4 ^. {
8 P: ?2 g" [. |. j9 Y. U" n3 Y" K$ J
非常感谢你的阅读
6 k5 c a: \2 K! R. y9 A
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
1 N. n4 e' }2 ], z
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
' n1 r" w- d/ `+ x$ F; q3 k' H8 J
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!
! G( ]% U8 P- E3 ?8 e
————————————————
4 J! J0 |. ]- Q# } c' O
版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
0 y; K/ K5 \8 i6 h" V# T9 G w' i8 M( H: r
原文链接:https://blog.csdn.net/chengxun03/article/details/105460563
4 C# I7 A6 U, y8 v, y3 h
: ]- a: ]- Y5 N I( `8 A" |
( I/ J* t6 F3 o5 Q; X8 {9 C I6 y' n
: K* K9 k& D$ u3 e( b
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5