python算法-选择排序

选择排序:

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

  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)

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