栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

经典排序算法——选择排序(python代码实现)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

经典排序算法——选择排序(python代码实现)

目录

选择排序

基本思想

性能特点

步骤详解

python代码


选择排序

        选择排序是一种十分基础的的排序算法,比较简单直观。当对数据量较少的序列实现升序或降序排序是可以采用选择排序。

基本思想

        从头到尾扫描所有的n个元素,从中找出最小或最大的元素并和第一个元素进行交换,然后从除第一个以外的n-1个元素中扫描,找出最小或最大的元素并和第一个(n-1个中)元素进行交换,不断迭代此操作剩下的元素,最终就是一个有序的序列。

性能特点
平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性
In-place不稳定

步骤详解

待排序列:1,42,65,876,34,656,4

14265876346564

升序排序 

第一趟排序:待排序列中1为最小元素,且1本来就在最小元素位置,则不发生元素交换。

已经有序{},剩下待排序序列{1,42,65,876,34,656,4}

min
扫描14265876346564
排序14265876346564

第二趟排序:剩下待排序列中4为最小元素,则把4交换到最小元素位置上。

已经有序{1},剩下待排序序列{42,65,876,34,656,4}

min
扫描14265876346564
排序14658763465642

第三趟排序:剩下待排序列中34为最小元素,则把34交换到最小元素位置上。

已经有序{1,4},剩下待排序序列{65,876,34,656,42}

min
扫描14658763465642
排序14348766565642

第四趟排序:剩下待排序列中42为最小元素,则把42交换到最小元素位置上。

已经有序{1,4,34},剩下待排序序列{876,65,656,42}

min
扫描14348766565642
排序14344265656876

第五趟排序:剩下待排序列中65为最小元素,且65本来就在最小元素位置,则不发生元素交换。

已经有序{1,4,34,42},剩下待排序序列{65,656,876}

min
扫描14344265656876
排序14344265656876

第六趟排序:剩下待排序列中656为最小元素,且656本来就在最小元素位置,则不发生元素交换。已经有序{1,4,34,42,65},剩下待排序序列{656,876}

min
扫描14344265656876
排序14344265656876

有序序列:待排元素只剩下一个,则整个序列已经是有序序列了。

已经有序{1,4,34,42,65,656},剩下待排序序列{876},此时整个序列已经有序{1,4,34,42,65,656,876}

14344265656876

python代码

升序

# 选择排序
def selectionSort(arr):
    for i in range(len(arr) - 1):
        minIndex = i  # 记录最小元素的索引
        # 找出最小元素
        for j in range(i + 1, len(arr)):  
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i不是最小元素时,将i和最小元素进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr


if __name__=="__main__":
    nums = [1, 42, 65, 876, 34, 656, 4, 6757, 89, 24, 65, 42]
    print("start:", nums)
    print("冒泡 :", selectionSort(nums))

降序

# 选择排序
def selectionSort(arr):
    for i in range(len(arr) - 1):
        maxIndex = i  # 记录最大元素的索引
        # 找出最大元素
        for j in range(i + 1, len(arr)):
            if arr[j] > arr[maxIndex]:
                maxIndex= j
        # i不是最大元素时,将i和最大元素进行交换
        if i != maxIndex:
            arr[i], arr[maxIndex] = arr[maxIndex], arr[i]
    return arr


if __name__=="__main__":
    nums = [1, 42, 65, 876, 34, 656, 4, 6757, 89, 24, 65, 42]
    print("start:", nums)
    print("冒泡 :", selectionSort(nums))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号