Python实现经典排序算法--选择排序

上一节降到插入排序算法,这次来讲一讲选择排序算法。

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。时间复杂度为O(n^2),当n较小时同插入算法一样,运算速度优于冒泡排序,但是对比于插入排序,其为一种不稳定的排序算法。以下是用Python实现经典插入排序的code。

def selectsort(list):
    if list!=None:
        if list==1:
            pass
        else:
            for i in range(len(list)):
                min=i
                for j in range(i+1,len(list)):
                    if list[j]<list[i]:
                        min=j
                        list[i],list[j]=list[j],list[i]
    print(list)
list1=[5,6,8,3,2]
selectsort(list1)

在代码中,我们可以看到,在这里我们使用了顶层循环和底层循环的双循环机制。首先,我们先来看看顶层循环,这里的循环次数为n次(假设排序对应的序列有n个元素),当循环开始,设置第一个元素为最小值,进入到底层循环,底层循环的次数依赖于i,其循环次数为n-i-1(i是从0开始的),激活函数是将第i+1个元素与第i+1个元素之后的元素做比较,如果第前者小于被比较的元素,则做换位处理,否则,不做处理;这样每一次循环就能找到最小值并将其排到前面,类似于插入排序,总计比较次数也为n*(n-1)/2;每一层顶层循环,都会选择一个最小值排列到列表前面。

下面来具体看一下每次顶层循环和底层循环计算机对列表操作的返回值:

def selectsort(list):
    if list!=None:
        if list==1:
            pass
        else:
            for i in range(len(list)):
                min=i
                print('[',i,']')
                for j in range(i+1,len(list)):
                    if list[j]<list[i]:
                        min=j
                        list[i],list[j]=list[j],list[i]
                        print('"',list,'"')
                    else:
                        print('*',list,'*')
    print(list)
list1=[5,6,8,3,2]
selectsort(list1)

out:

[ 0 ]
* [5, 6, 8, 3, 2] *
* [5, 6, 8, 3, 2] *
" [3, 6, 8, 5, 2] "
" [2, 6, 8, 5, 3] "
[ 1 ]
* [2, 6, 8, 5, 3] *
" [2, 5, 8, 6, 3] "
" [2, 3, 8, 6, 5] "
[ 2 ]
" [2, 3, 6, 8, 5] "
" [2, 3, 5, 8, 6] "
[ 3 ]
" [2, 3, 5, 6, 8] "
[ 4 ]
[2, 3, 5, 6, 8]

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值