【学习笔记】python版选择排序和插入排序及时间复杂度分析
来源:互联网 发布:改键位软件 编辑:程序博客网 时间:2024/05/17 03:15
选择排序原理:从N个未排序的数据项中选出最小数(这里假设我们按照升序排列),再从剩下的N-1个未排序的数据项中选出最小数,不断重复此过程,直到所有数被拍好序为止。
以下为实现代码:
#!/usr/bin/pythonimport sysn = len(sys.argv) - 1min_num = sys.maxintfor i in range(1, n):tmp_min = ifor j in range(i + 1, n + 1):if int(sys.argv[j], 10) < int(sys.argv[tmp_min], 10): [C]tmp_min = jtmp = sys.argv[i] [M]sys.argv[i] = sys.argv[tmp_min] [M]sys.argv[tmp_min] = tmp [M]print sys.argv
代码中的比较[C]和数据移动[M]都会被执行(n-2+n-3+n-4+......+1)=(n-1)(n-2)/2次,所以最佳、平均和最差时间复杂度均为O(N^2)。
用此代码对[8,1,2,9,7,5]数列进行排列,过程如下:
['./select.py', '1', '8', '2', '9', '7', '5']
['./select.py', '1', '2', '8', '9', '7', '5']
['./select.py', '1', '2', '5', '9', '7', '8']
['./select.py', '1', '2', '5', '7', '9', '8']
['./select.py', '1', '2', '5', '7', '8', '9']
插入排序原理:从未排序数据项中选择一个数据项插入到已排序数据项中合适的位置,不断重复这个过程直到所有数据被排好序。
以下是python实现代码:
#!/usr/bin/pythonimport sysn = len(sys.argv)for i in range(1, n - 1):tmp = sys.argv[i + 1]for j in range(i + 1, 1, -1):if int(tmp, 10) < int(sys.argv[j - 1], 10): [C]sys.argv[j] = sys.argv[j - 1] [M]tmp_i = j - 1 [M]sys.argv[tmp_i] = tmpprint sys.argv
算法中比较部分[C]一定会被执行(n+1)(n-2)/2次,数据移动[M]最多会被执行(n+1)(n-2)/2次,至少被执行0次,所以时间复杂度为o(N^2)。
用此代码对[8,1,2,9,7,5]数列进行排列,过程如下:
['./insert.py', '1', '8', '2', '9', '7', '5']
['./insert.py', '1', '2', '8', '9', '7', '5']
['./insert.py', '1', '9', '8', '9', '7', '5']
['./insert.py', '1', '7', '9', '8', '9', '5']
['./insert.py', '1', '5', '7', '9', '8', '9']
- 【学习笔记】python版选择排序和插入排序及时间复杂度分析
- 【学习笔记】python版希尔排序及其时间复杂度分析
- 常用排序算法--冒泡排序及改进和插入排序时间复杂度分析
- 插入排序和归并排序实现以及时间复杂度分析
- 希尔排序&选择排序&时间复杂度分析
- 插入排序算法的java实现及时间复杂度分析
- 算法 插入排序 的 JS实现及时间复杂度分析
- 【排序】时间复杂度为O(N^2)的排序——冒泡、选择和插入排序
- 插入排序和shell排序及其时间复杂度和空间复杂度分析
- 插入排序的时间复杂度分析
- 选择排序的时间复杂度分析
- 插入排序和时间复杂度下界
- 简单排序算法时间空间复杂度分析及应用(2)-插入排序
- 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
- 选择排序函数及复杂度分析
- 插入排序 和 归并排序(分治)的c实现和时间复杂度分析
- 堆排序算法及时间复杂度分析
- 归并排序实现及时间复杂度分析
- C# 小程序之新手练习(三)数组模拟约瑟夫环
- LeeCode27:Implement strStr()
- 分享一位软件工程师的7年总结
- 异步消息的传递-回调机制
- Objective C的学习之HelloWorld
- 【学习笔记】python版选择排序和插入排序及时间复杂度分析
- POJ2151--Check the difficulty of problems
- Android JNI入门实例(Windows+Cygwin+Eclipse)
- property()
- [LeetCode] 一个BST的两个节点的值被交换,要求修正这个BST
- linux上ln命令详细说明
- 使用TreeSet集合比较Comparable接口和Comparator接口的区别
- 内存Dump原理
- 漫谈大数据仓库与挖掘系统(一):前言:大数据的价值