数学建模社区-数学中国
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
[打印本页]
作者:
杨利霞
时间:
2020-4-12 11:41
标题:
Python实现快速排序和插入排序算法及自定义排序的示例
Python实现快速排序和插入排序算法及自定义排序的示例
2 `6 D. z) g, W4 w4 O
这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下
! A' K9 }+ z2 |0 u( | o
一、快速排序
) m; p3 u5 d( N1 e, ]
7 N* N. H2 L: o$ t% h
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
; J7 B( Z, i1 E" _+ ^; g& L
1 o8 h S" S! [0 K. P7 s
快速排序,递归实现
2 H/ K: o! b, o% ]$ i
- |) P2 H$ F* V! j
def quick_sort(num_list):
& ^: f3 c( u; e, n2 h
"""
0 { k8 i4 `! p) t. G7 ~
快速排序
! a/ k/ C7 `. _9 ] N% A+ s* H
"""
6 Y# z- h' L) G2 h7 x/ ^
if num_list == []:
( K6 e% c6 w, {6 k
return num_list
; @( O" c3 i7 C9 Q
smallList = []
3 j9 X6 M# b! B2 A. F: v
bigList = []
: _ B' h8 W9 p
middleElement = num_list[0]
3 Q: N/ t# ]& ?; u7 u6 m4 @4 r
for i in num_list[1:]:
: o: @; u; B) p m# i% s
if i <= middleElement:
7 o9 |4 s) |" F$ P2 z
smallList.append(i)
$ ?) z H: U9 c1 }
else:
" ]0 c$ g4 z3 J
bigList.append(i)
; {* I$ s; U2 z5 v- N/ K0 Q# _7 I
return quick_sort(smallList)+[middleElement]+quick_sort(bigList)
; U ?: q) R" s1 c P: H2 l
) ? b/ N. U0 ^- Z( p8 Z* M+ v; k
8 G; F% t1 u8 M \8 J
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
' W1 E/ K: u) z# S; Z
$ Z6 t2 T& s0 {, i0 ]- u3 x
插入排序
h7 i: L3 ^+ S# N* J+ d
$ @6 m1 b7 B2 a1 [' P- ^! i! o8 N
( P" u. n1 ?$ O& {$ U
def insert_sort(num_list):
: M( y! {/ L( j+ O8 I
"""
" r( M' `# f# i9 H: }# e% u7 B5 m& n
插入排序
% Z/ A7 i# r1 d( Z' p$ W* w
"""
3 d4 z' j: ?- r; J
for i in range(len(num_list)-1):
( X* c/ w, [: U4 q+ S9 ]. h
for j in range(i+1, len(num_list)):
4 w4 U9 X K3 I# Z9 ~
if num_list
>num_list[j]:
' W( m# Q/ S9 k A% ^$ M7 Z' u
num_list
,num_list[j] = num_list[j],num_list
7 K" `) G6 O1 i7 U
return num_list
( w/ A) i1 K1 Z8 K1 f) g4 D% W
8 S( u& {, e5 |4 l
5 d" ]' I8 Q% L4 e
三、自定义排序
! c; P& r1 n0 x4 [
利用 sort() 或 sorted() 的 key 即可实现。
5 s, K: s0 m( _5 q E2 H* e- o4 n
def sort_key(obj):
- [. f6 n2 ~" C {% S4 A
sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
. h2 N, Z. n3 l1 I3 J' K, D
return sorted_list.index(obj)
, k$ ?$ p0 Y0 d7 n% C8 X; g
7 I) c/ ^( }0 `8 D1 P, ?, V, a
: G4 A1 d/ v7 ^ \ ^1 ?
if __name__ == '__main__':
6 I( d7 N% p# J4 z0 y
print sorted(range(10), key=sort_key)
% Q# f, C! F5 _6 E3 X
* U$ b! L5 j+ Q7 X9 T
# 输出结果如下
5 C: A t& G& C( S
[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
% {: {* {. h+ Y9 ?- `/ G5 d
# z F- ~7 P( B4 P5 A
# a n# B5 C( P; g) |& Y
非常感谢你的阅读
" ~) ~$ S M$ H. q6 g/ W" C
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
: r" [6 D3 d( I1 ^
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
5 e9 v4 ^/ h/ ]! Q
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!
1 {/ H! I j h8 [; T
————————————————
, s; U0 n( f& d0 }
版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
. p$ B8 w2 Z1 P
原文链接:https://blog.csdn.net/chengxun03/article/details/105460563
5 I# k+ k4 m% {+ Q: Z8 H4 t
; Q# a3 c* G5 v4 \$ j' F
& c# N# P3 p3 c5 i; C
5 l6 @# J# `6 y4 {6 r, ?0 Q
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5