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

目录

选择排序

基本思想

性能特点

步骤详解

python代码


选择排序

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

基本思想

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

排序步骤图

性能特点

平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性
O(n^{2})O(n^{2})O(n^{2})O(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))
  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值