算法日记3.选择排序
Posted 子木子木
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法日记3.选择排序相关的知识,希望对你有一定的参考价值。
1.数组和链表
- 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。
- 链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。
2.数组与链表的运行时间
数组 | 链表 | |
读取 | O(1) | O(n) |
插入 | O(n) | O(1) |
删除 | O(n) | O(1) |
数组适合读取操作,链表适合插入和删除
3.选择排序算法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法
例如 :
对数组[5,4,3,2,1]进行排序
第一步 找出最小的 数字1 放入新数组[1],执行步数为 4 原数组变为[5,4,3,2]
第二步 从[5,4,3,2]找出最小的 数字2 放入新数组[1,2],执行步数为 3 原数组变为[5,4,3]
第三步 从[5,4,3]找出最小的 数字3 放入新数组[1,2,3],执行步数为 2 原数组变为[5,4]
第四步 从[5,4]找出最小的 数字4 放入新数组[1,2,3,4],执行步数为 1
第五步 将最后一个 5 插入 [1,2,3,4,5]。至此 排序结束,
def selectSort(arr): sort=[] step=0 for j in range(len(arr)): smallest=arr[0] index=0 # 从第一位开始 for i in range(1,len(arr)): if arr[i]<smallest: step+=1 smallest=arr[i] index=i sort.append(arr.pop(index)) print u"执行步数",step print sort return sort selectSort([5,4,3,2,1]) selectSort([7,6,5,4,3,2,1]) selectSort([8,7,6,5,4,3,2,1])
上面的例子是选择排序最糟糕的情况下 执行情况,操作数为n+(n-1)+(n-2)+.......1
因为每次必须检查数组中所有的元素,这个运行时间为O(n),这样的操作要执行n次 。所有需要的总运行时间为:O(n*n) 即O(n²)。
选择排序不是一种快速的排序方式
以上是关于算法日记3.选择排序的主要内容,如果未能解决你的问题,请参考以下文章