Leetcode-排序-选择排序

原理

用通俗的语言来讲,选择排序,就是将数列中最大(小)的数找出来,放到合适的位置,然后在剩下的集合里面继续找最大(小)的数放在合适的位置,如此往复,直到整个数列变为有序位置。与冒泡排序不一样的是,它不是比较相邻的两个数,而是比较某个数与数列中剩下所有数的大小。

1.第一轮排序

原始数列为:

7 3 5 1 9 4

第一轮排序首先以第一个数为基数,与剩下的所有数进行比较,找到整个数列中最小的数,然后交换最小数与第一个数的位置。实现代码如下:

for i in range(0,len(iList)-1):
    minIndex = i
    for j in range(i+1,len(iList)-1):
        if iList[j] <=iLIST[minIndex]:
            minIdex = j

以上排序过程会将第i+1(i从0开始)大的数放在数列下标为i的位置,那么第一次排序的结果为:

1 3 5 7 9 4

2.第二轮排序:

1 3 5 7 9 4

3.第三轮排序:

1 3 4 7 9 5

4.第四轮排序:

1 3 4 5 9 7

5.第五轮排序:

1 3 4 5 7 9

代码实现

from randomList import randomList  #这个模块是自定义的,在“Leetcode-排序-冒泡排序”那篇文章
import timeit

iList = randomList(20)


def selectionSort(iList):
    if len(iList) <= 1:
        return iList
    for i in range(0, len(iList) - 1):
        if iList[i] != min(iList[i:]):  # 判断当前元素是不是从当前元素开始的剩下所有元素中最小的
            minIndex = iList.index(min(iList[i:]))  # 将从当前元素开始的剩下所有元素中最小的元素索引复制给minIndex
            iList[i], iList[minIndex] = iList[minIndex], iList[i]#交换当前元素和最小元素


    return iList

if __name__ == '__main__':
    print(iList)
    print(selectionSort(iList))
    print(timeit.timeit("selectionSort(iList)","from __main__ import selectionSort,iList",number=100))#用此算法排序100次所花时间

整理于2020年10月14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值