插入排序
来源:互联网 发布:厦门seo陈仁潘 编辑:程序博客网 时间:2024/06/05 10:34
/* * 原始数据 34 8 64 51 32 21 移动的位置 * p=1趟后 8 34 64 51 32 21 1 * p=2趟后 8 34 64 51 32 21 0 * p=3趟后 8 34 51 64 32 21 1 * p=4趟后 8 32 34 51 64 21 1 * p=5趟后 8 21 32 34 51 64 4 * */ /*插入排序有N-1趟排序组成,对于从p=0到p=N-1,插入排序保证从位置0到位置p上的元素为已排序状态。*/public static <AnyType extends Comparable<? super AnyType>> void insertionSort(AnyType[] a) { int j;for(int p=1;p<a.length;p++){AnyType tmp = a[p];for(j=p;j>0&&tmp.compareTo(a[j-1])<0;j--){a[j] = a[j-1];}a[j] = tmp;} }
插入排序的分析由于嵌套循环每一次都花费N次迭代,因此插入排序为O(N2),如返序输入可以达到这个境界,对于循环中的元素的比较次数对于p每个值最多是p+1次,对所有p求和可得到另一方面,如果输入数据已经预先排序,那么运行时间为O(N),因为内层循环是立即判定不成立而终止,事实上,如果输入几乎是被排序,那么插入排序将运行的很快,实际上,插入排序的平均情形时Θ(N2)
逆序是指具有性质i<j但a[i]>a[j]的序偶(a[i],a[j]).34,8,64,51,32,21有九个序偶(34,8),(34,32),(34,21),(64,51),(64,32),(64,21),(51,32),(51,21),(32,21)注意,这正好是需啊哟插入排序执行的交换次数,因为交换两个不安顺序排列的相邻元素恰好消除一个逆序,而一个排过序的数组没有逆序,由于算法还有O(N)量的其他工作,因此插入排序的时间是O(I+N),I是原始数组中的逆序数 定理一:N个互异数的数组的平均逆序数是N(N-1)/4 证明方法,N个互异数的数组和它的反序数组的总共逆序数是N(N-1)/2,因此平均是N(N-1)/4,这个定理意味着插入排序平均是二次的,同时也提供了只交换相邻元素的任何算法的一个下界。 定理二:通过交换相邻元素进行排序的任何算法平均都只需要Ω(N2) N(N-1)/4=Ω(N2)
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- MySQL基础知识---------mysql_real_connect()
- vlookup 的#N/A(2)
- IOS7学习之路九(ios7自定义UIAlertView)
- 每天一算法(三)生产着消费者问题
- HttpURLConnection与HttpClient区别及联系
- 插入排序
- 局域网内用IIS架设网站,解决本机可访问,但网内其他用户无法访问问题
- CELERY 消息队列配置
- sicily 1441 pie
- LeetCode 142 Linked List Cycle II
- 逆向笔记【贰】
- make: warning: Clock skew detected. Your build may be incomplete
- js 防止多次提交
- vlookup 的#N/A(3)