浅谈算法——插入排序性能分析
2013-02-18 10:31
246 查看
前两天看得是快速排序和冒泡排序,今天学习一下插入排序,可以说插入排序比前两种方便很多。
测试:8秒钟,明显比冒泡排序快很多,但是比快速排序要是慢一些,这是因为在冒泡排序下是进行值交换,而在插入排序下是值移动,所以直接插入排序将要优于冒泡排序,时间在3倍左右。
性能分析:
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
/** * 插入排序 */ function insert_sort2($_array) { for($i=0;$i<count($_array);$i++) { $key = $_array[$i]; for($j=$i;$j>0;$j--) { if ($key<$_array[$j-1]) { $_array[$j] = $_array[$j-1]; } else { break; } } $_array[$j] = $key; } return $_array; } /* * 生成随机数组 */ function rand_array($_num) { for($i=0;$i<$_num;$i++) { $array[$i] = rand(0,$_num*10); } return $array; } $rand_array = rand_array(100); print_r($rand_array); $start = time(); $result = insert_sort2($rand_array); $end = time(); print_r($result); echo "插入排序需要的时间" . ($end - $start) . "秒;";
测试:8秒钟,明显比冒泡排序快很多,但是比快速排序要是慢一些,这是因为在冒泡排序下是进行值交换,而在插入排序下是值移动,所以直接插入排序将要优于冒泡排序,时间在3倍左右。
性能分析:
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
相关文章推荐
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
- 算法分析与设计——快排和插入排序的实现
- 插入排序(insert_sort)与 并归排序(merge_sort) 算法分析
- 多种排序算法性能分析代码 C++
- 笔试算法题(57):基于堆的优先级队列实现和性能分析(Priority Queue based on Heap)
- 【算法】1 由插入排序看怎样分析和设计算法
- TCP拥塞控制算法 优缺点 适用环境 性能分析
- k-近邻算法(详细代码注释与调参性能分析)
- Hadoop链式MapReduce、多维排序、倒排索引、自连接算法、二次排序、Join性能优化、处理员工信息Join实战、URL流量分析、TopN及其排序、求平均值和最大最小值、数据清洗ETL、分析气
- (转)如何分析分治型算法性能
- 【算法】1 由插入排序看如何分析和设计算法
- javascript 性能分析:算法和流程控制
- MIT:算法导论——1.算法分析——插入排序 vs 二路归并排序
- TCP拥塞控制算法 优缺点 适用环境 性能分析
- Java之学习笔记(11)------------算法性能分析
- 浅谈对主成分分析(PCA)算法的理解