排序算法专题之选择排序
Posted Python算法之旅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法专题之选择排序相关的知识,希望对你有一定的参考价值。
如果说算法是程序的灵魂
那么排序就是各种灵魂中最有趣的一个
选择排序、冒泡排序、插入排序、
归并排序、堆排序、快速排序等算法
竞相出场
各领风骚
成为各领域的主角
也是求学深造、应聘面试不可不知的硬知识
接下来我准备了一个排序算法系列专题,和大家一起交流讨论
扫码加入“Python算法之旅”微信群,和斌哥面对面交流,更多资料和更有趣的话题等你一起来分享。
1. 经典选择排序
例题1.使用选择排序算法对列表a升序排序。
函数名:selection_sort(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
算法思想:外层循环控制待排序数组的左边界,即a[i:]为待排序部分;内层循环扫描a[i+1:],找到最小元素的下标
def selection_sort(a):
for i in range(len(a)-1):
imin = ①
for j in range(i+1, len(a)):
if a[j] < a[imin]:
imin = ②
if imin != i:
a[i], a[imin] = ③
2. 双向选择排序
例题2.使用双向选择排序算法对列表a升序排序。
函数名:selection_sort_2(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
def selection_sort_2(a):
left, right = 0, len(a)-1
while left < right:
imin = imax = ①
for i in range(left+1, right+1):
if a[i] < a[imin]:
imin = ②
elif a[i] > a[imax]:
imax = ③
if imin != left:
a[imin], a[left] = a[left], a[imin]
if imax == left:
④
if imax != right: a[imax], a[right] = a[right], a[imax]
left, right = left+1, right-1
3. 选择排序简单应用
同步训练1.有一组正整数,要求分别对奇数进行升序排序,偶数进行降序排序,其中奇数在前,偶数在后。要求运用选择排序算法思想完成本题。
例如:排序前a = [6, 3, 5, 4, 1, 2, 8, 7],排序后a = [1, 3, 5, 7, 8, 6, 4, 2]。
函数名:selection_sort_3(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行排序。
def selection_sort_3(a):
left, right = 0, len(a)-1
while left <= right:
imin = ①
for i in range(left+1, right+1):#查找最小值下标
if a[i] < a[imin]:
imin = ②
if a[imin] % 2 == 1: #是奇数则把最小值交换到左端
③
left += 1
else: #是偶数则把最小值交换到右端
④
right -= 1
1. 经典选择排序
例题1.使用选择排序算法对列表a升序排序。
函数名:selection_sort(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
算法思想:外层循环控制待排序数组的左边界,即a[i:]为待排序部分;内层循环扫描a[i+1:],找到最小元素的下标
def selection_sort(a):
for i in range(len(a)-1):
imin = i
for j in range(i+1, len(a)):
if a[j] < a[imin]:
imin = j
if imin != i:
a[i], a[imin] = a[imin], a[i]
2. 双向选择排序
例题2.使用双向选择排序算法对列表a升序排序。
函数名:selection_sort_2(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行升序排序。
def selection_sort_2(a):
left, right = 0, len(a)-1
while left < right:
imin = imax = left
for i in range(left+1, right+1):
if a[i] < a[imin]:
imin = i
elif a[i] > a[imax]:
imax = i
if imin != left: a[imin], a[left] = a[left], a[imin]
if imax == left: imax = imin
if imax != right: a[imax], a[right] = a[right], a[imax]
left, right = left+1, right-1
3. 选择排序简单应用
同步训练1.有一组正整数,要求分别对奇数进行升序排序,偶数进行降序排序,其中奇数在前,偶数在后。要求运用选择排序算法思想完成本题。
例如:排序前a = [6, 3, 5, 4, 1, 2, 8, 7],排序后a = [1, 3, 5, 7, 8, 6, 4, 2]。
函数名:selection_sort_3(a)
参数表:a -- 待排序列表。
返回值:该方法没有返回值,但是会对列表的对象进行排序。
def selection_sort_3(a):
left, right = 0, len(a)-1
while left <= right:
imin = left
for i in range(left+1, right+1):#查找最小值下标
if a[i] < a[imin]:
imin = i
if a[imin] % 2 == 1: #是奇数则把最小值交换到左端
a[imin], a[left] = a[left], a[imin]
left += 1
else: #是偶数则把最小值交换到右端
a[imin], a[right] = a[right], a[imin]
right -= 1
写在后面
Python排序算法系列文章是我在阅读了大量算法专著以后,尝试用粗陋的语言把自己的理解表达出来。由于本人水平有限,表述中难免出现疏漏甚至错误之处,敬请谅解。
无论是赞同还是反对我的看法,都请你给我留言。如果你有新的想法,千万不要憋在心里,请发出来大家一起讨论。让我们相互学习,共同进步!
需要本文word版的,可以加入“选考VB算法解析”知识星球参与讨论和下载文件,“选考VB算法解析”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注选考VB算法,感兴趣就一起来!
相关优秀文章:
以上是关于排序算法专题之选择排序的主要内容,如果未能解决你的问题,请参考以下文章