排序算法练习比较有趣,之后的技术路线按照下表进行:

python乱序数组 python3 数组排序_数组

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。选择排序是一种基础的排序算法,其基于数组的数据结构进行的,因为他们在逻辑上相邻的元素在物理内存之上也是彼此相邻的。而且同一个数组的数据类型必须是一致的,这样我们就可以通过数组的下标[index]进行随机顺序访问数组中的元素。排序的基本思想是:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。通俗的说:选择排序就是通过数组下标,不断的选择最小的元素,直至无元素选择。

python乱序数组 python3 数组排序_选择排序_02

 

算法原理:

 1. 选择第一个元素的索引(确定规则:从小到大或从大到小)。

     2. 在剩下的元素中找到最小的数与之交换。

     3. 选择剩下元素的第一个位置索引,重复1.2步操作,即可实现选择排序。

算法实现:
 

#选择排序
def Selection_Sort(list2):
  for i in range(0, len (list2)-1):
    min_ = i
    for j in range(i + 1, len(list2)):
      if list2[j] < list2[min_]:
        min_ = j
    list2[i], list2[min_] = list2[min_], list2[i]
    print(list2)
  print('选择排序:', end=' ')
  print(list2)
#主函数
if __name__ =='__main__':
    List =np.random.randint(200, size=10)
    print('随机列表:',end = '')
    print(List)
    #Bubble_Sort(List)
    # 选择排序
    Selection_Sort(List)

        注:实验中使用随机生成列表的方式,使用Python numpy 包。

效果显示:

python乱序数组 python3 数组排序_选择排序_03

时间复杂度:

选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。

           比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

算法稳定性:

       选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。所以选择排序是一个不稳定的排序算法。