码迷,mamicode.com
首页 > 编程语言 > 详细

python算法-选择排序

时间:2018-01-27 20:20:49      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:第一个   sel   时间   选择排序   str   定位   python   style   int   

选择排序:

一、语言描述:从一列数字中依次选出最小的放第一位,次小的放第二位,依次类推完成整个排序

  1. 第一次遍历,找到最小的数字,放在第一个位置
  2. 第二次遍历,找到第二大的数字,放在第二个位置
  3. ...... 以此类推,完成整个排序

固定位置,找元素

  1. 对于n个元素的数组,从第一个位置开始,找到最小,放在第一个位置
  2. 从第二个位置开始,剩下的数组中,找到最小,放在第二个位置
  3. ....
  4. 从第n-1个位置开始,在剩下的数组中,找到最小,放在第n-1个位置

 

代码实现:

# encoding=utf-8

 

def selectSort(listx):

    xLen = len(listx)

    for i in xrange(xLen):

        min = i

        for j in xrange(i+1,xLen):

            if listx[min] > listx[j]:

                min = j

        listx[i],listx[min] = listx[min],listx[i]

    return listx

 

if __name__ == ‘__main__‘:

    print selectSort([32,34,55,66,5])

 

习题一:修改成降序排列

 

#enconding = utf-8

 

def Select_Sort(lista):

    for i in xrange(len(lista)):

        min = i

        for j in xrange(i+1,len(lista)):

            if (lista[min] < lista[j]):

                min = j

        lista[min],lista[i] = lista[i],lista[min]

    return lista

 

if __name__ == ‘__main__‘:

    print Select_Sort([32,14,67,8,21])

 

习题2:代码是否存在不必要的比较,是否可以减去,说出原因

 

# encoding=utf-8

 

def selectSort(listx):

    xLen = len(listx)

    for i in xrange(xLen-1):

        min = i

        for j in xrange(i+1,xLen):

            if listx[min] > listx[j]:

                min = j

        listx[i],listx[min] = listx[min],listx[i]

    return listx

 

if __name__ == ‘__main__‘:

    print selectSort([32,34,55,66,5])

 

 

二、计算时间复杂度

32,34,55,66,5

第一轮:532,34,55,66   n-1

第二轮:5,32,34,55,66    n-2

...

第五轮:5,32,34,55,66   1

1+2+3+... +n-2+ n-1 = n(n-1)/2

时间复杂度为 O(n^2)

python算法-选择排序

标签:第一个   sel   时间   选择排序   str   定位   python   style   int   

原文地址:https://www.cnblogs.com/qingqing-919/p/8366722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!