- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564647 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174617
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
Python实现快速排序和插入排序算法及自定义排序的示例% _1 j; Q; I& |7 R2 `% M# q
这篇文章主要介绍了Python实现快速排序和插入排序算法及自定义排序的示例,自定义排序用到了Python的sort和sorted函数,需要的朋友可以参考下6 H1 G! A9 Y4 s5 J: l
一、快速排序
9 K) _ P9 [8 W0 F$ \, i+ H; Z
, F* I1 K2 t* `% z, r' l快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
9 X% Z6 ^+ {1 p L
4 G/ o, U0 c+ F/ u) X快速排序,递归实现
: _+ Q4 B6 |, g
7 ?2 U. [8 l) A def quick_sort(num_list):
/ E) B9 {' O. Y4 V; ? """7 c, E+ l% K: q& _5 q
快速排序- ^. x4 Q) F* P F: f3 e
"""
3 ~" a. R/ r" Y# ?. H4 ^, M5 M if num_list == []:/ R7 s! J% |2 B' v9 `
return num_list
5 F* @! B8 g. e- u; f smallList = []+ a; M: w, v7 _
bigList = []: z6 M- t4 {9 }' P! g r
middleElement = num_list[0]
0 V0 K* E+ h6 d' Z for i in num_list[1:]:4 h: _/ @8 T- I1 n2 n/ T
if i <= middleElement:1 W1 L) S) q1 f& k% c5 l# q
smallList.append(i)
. Z3 a% i/ D6 B8 z8 ^ else:
' s9 v5 L1 r+ @) x5 V! |% s6 R bigList.append(i)
0 Q1 n1 W/ R" ?+ K/ e f d/ E return quick_sort(smallList)+[middleElement]+quick_sort(bigList)
5 j! S9 ^' r% q8 R: E2 {, h; L/ F) X0 w/ k" P
" T5 v1 ~6 p4 t# r7 ]& e
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。0 N& m( a- C' k2 z7 e
& ?# Y. G+ v' s) @. _( c, C
插入排序9 \% H8 m' K9 O! W9 F6 U: ~/ [
2 \5 s& p$ N: C+ K/ P( i% v" i! D
def insert_sort(num_list):
0 H5 T/ R4 O4 t3 U1 R1 R6 l """ _+ W; v5 T% _
插入排序
9 N- w: m) a2 t3 `% P# Q """
: B* d: a; {; L0 u6 z for i in range(len(num_list)-1):7 h B7 D" M7 a8 Y. T
for j in range(i+1, len(num_list)):
1 F6 p$ ?9 U& f: B if num_list>num_list[j]: J- d' S" D( S& s' Q/ t; b
num_list,num_list[j] = num_list[j],num_list: i8 V0 T- {' e* t+ S! P6 \' |% Z i
return num_list
9 G3 @$ D0 E% c0 L1 W4 ^
9 _7 z! G% j7 m) e7 H/ B g/ L" d3 @3 [! q @$ K4 O2 W3 S
三、自定义排序
# m1 M2 f& ]# b5 w5 L利用 sort() 或 sorted() 的 key 即可实现。
# U7 {7 r- C) i3 m2 |) P Ddef sort_key(obj):
( L2 h5 R! W- U+ g sorted_list = [4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
& u4 M" |. b7 p( ~ return sorted_list.index(obj)
% @: Y, J6 T* C/ B. K/ u' s
: ~' \) c/ `- y6 q% b7 X7 F8 ]7 V) j% ]& ?9 `+ \" n- q9 z
if __name__ == '__main__':$ Q j# G. \* W" t/ V
print sorted(range(10), key=sort_key)$ u% \; W+ Y) L/ P
5 |6 X8 w0 ]4 a) S# {2 i3 o# 输出结果如下
& X+ y4 f% Q) n' N1 i h[4, 2, 5, 9, 7, 8, 1, 3, 6, 0]
( s( L9 q/ k- q9 ^% n5 P% I; |* `* ?1 j3 ]8 U0 d" D3 L. s
& x' m! A. F* [1 h. y5 V; \非常感谢你的阅读7 k. N# {4 d3 s3 B
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
! {/ K3 ]! s6 J9 D没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
( K6 w5 H4 d& \" F, ^' ]% w其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?[点击加入]想做你自己想成为高尚人,加油!# W- ^* [/ e; P* Q2 @
————————————————1 r" Y4 n7 n' ~6 Y# [8 [
版权声明:本文为CSDN博主「程序员牡蛎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。. y# W/ t" z- X( Z
原文链接:https://blog.csdn.net/chengxun03/article/details/105460563
# P+ x9 D1 S e: v7 f6 ^- J
- z% ?4 W- @- e% w9 ]6 f) B6 o
% |' K5 E) E5 q s+ }/ P7 w: \
& g2 M7 J+ m& b, j |
zan
|