排序算法专题之选择排序

Posted Python算法之旅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法专题之选择排序相关的知识,希望对你有一定的参考价值。


好好学习 天天向上
时光
排序算法专题之选择排序
干货来啦
排序算法专题之选择排序

如果说算法是程序的灵魂

那么排序就是各种灵魂中最有趣的一个

选择排序、冒泡排序、插入排序、

归并排序、堆排序、快速排序等算法

竞相出场

各领风骚

成为各领域的主角

也是求学深造、应聘面试不可不知的硬知识

接下来我准备了一个排序算法系列专题,和大家一起交流讨论

排序算法专题之选择排序
加入我们
排序算法专题之选择排序
“Python算法之旅”微信群等着你
排序算法专题之选择排序
排序算法专题之选择排序
排序算法专题之选择排序
排序算法专题之选择排序

扫码加入“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算法,感兴趣就一起来!



相关优秀文章:


以上是关于排序算法专题之选择排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法专题之希尔排序

排序算法专题之快速排序

排序算法专题之归并排序

排序算法专题之桶排序

排序算法专题之冒泡排序

排序算法专题之插入排序