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]


猜你喜欢

转载自blog.csdn.net/u011213419/article/details/81033435