算法详情【插入排序】
来源:互联网 发布:芜湖一中王海飞 知乎 编辑:程序博客网 时间:2024/06/11 17:24
一、 直接插入排序思想:
将待排序的记录Ri,插入到已排好序的记录表R1, R2 ,…., Ri-1中,得到一个新的、记录数增加1的有序表。 直到所有的记录都插入完为止。
设待排序的记录顺序存放在数组R[1…n]中,在排序的某一时刻,将记录序列分成两部分:
◆ R[1…i-1]:已排好序的有序部分;
◆ R[i…n]:未排好序的无序部分。
显然,在刚开始排序时,R[1]是已经排好序的。
二、 直接插入排序算法
= 0; $j--) { //$j=0,1,0 //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素 if ($tmp < $arr[$j]) { //发现插入的元素要小,交换位置 //将后边的元素与前面的元素互换 $arr[$j + 1] = $arr[$j]; //将前面的数设置为 当前需要交换的数 $arr[$j] = $tmp; } else { //如果碰到不需要移动的元素 //由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } //将这个元素 插入到已经排序好的序列内。返回 return $arr;}$arr = array(6,5,4,3,2,1);$res = input_sort($arr);print_r($res);//排序过程//[6],5,4,3,2,1////[5,6],4,3,2,1////5,4,6,3,2,1//[4,5,6],3,2,1////4,5,3,6,2,1//?>
三、 直接插入排序复杂度分析
(1) 最好情况:若待排序记录按关键字从小到大排列(正序),算法中的内循环无须执行,则一趟排序时:关键字比较次数1次,每趟排序都要移动将近1个记录,这样n个记录最终的时间复杂度是O(n)。
(2) 最坏情况:若待排序记录按关键字从大到小排列(逆序),n个记录需要n-1趟排序,最坏的情况就是完全逆序的情况,每趟排序都要移动将近n个记录,这样最终的时间复杂度是O(n2)。
(3) 稳定性:稳定排序
阅读全文
0 0
- 算法详情【插入排序】
- 算法详情【选择排序】
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法---插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 排序算法---插入排序
- 排序算法--插入排序
- 排序算法--插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 合并两个递增链表为一个递增链表
- linux常用命令
- <13>—— Roman to Integer
- Machine learning in action ch02 KNN笔记
- maven 引用自己的工程项目
- 算法详情【插入排序】
- 420小时学习代码之后-如何教你免费自学Python
- 简单爬虫-爬取百度百科1000个页面
- Shell脚本之8种字符串截取方法
- 使用Myeclipse创建Maven项目
- BZOJ 3629: [JLOI2014]聪明的燕姿
- java 位运算符详解 及 实例 ---与(&),或(|),非(~),异或(^)
- 树莓派opencv的安装
- ArrayList和LinkedList的底层源码之我见