直接插入排序
2018-06-18 00:46:07来源:未知 阅读 ()
基本思想
每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。
排序过程
1.初始化无序区、有序区,待排序数组的第一个元素为有序区,剩余元素为无序区;
2.遍历无序区,将无序区每一个元素插入到有序区的正确位置上;
Java算法实现
/** * 排序接口类 * Created by zhouyh on 2018/5/25. */ public abstract class ISort { public abstract int[] sort(int[] array); } /** * 直接插入排序 * Created by zhouyh on 2018/5/25. */ public class DirectInsertSort extends ISort { @Override public int[] sort(int[] array) { int tmp; for (int i=1; i<array.length; i++){ tmp = array[i]; //array[i]的拷贝 //如果右侧无序区第一个元素array[i] < array[i-1]小于左侧有序区最后一个元素 //需要将左侧有序区比array[i]大的元素后移 if (array[i] < array[i-1]){ int j = i-1; while (j>=0 && tmp<array[j]){ array[j+1] = array[j]; j--; } array[j+1] = tmp; } } return array; } }
Python代码实现
def dirInsertSort(reList): length = len(reList) for i in range(1, length): for j in range(i): if reList[i] < reList[j]: reList.insert(j, reList[i]) reList.pop(i+1) break return reList relist = [1, 23, 12, 7, 34, 10, 51] print(dirInsertSort(relist))
性能分析
时间复杂度,在比较的数组有序的情况下,为O(n),即此刻比较次数n-1次,移动次数0;在最坏的情况下,即数组逆序的情况下,为O(n^2),平均时间复杂度为O(n^2)
空间复杂度,直接排序的过程中,仅用到了一个临时变量,空间复杂端为O(1)
稳定性,直接插入排序为稳定排序,即排序前后的元素位置还是保持和排序前的前后顺序一致,例{2①,45,12,2④,3},排序后{2①,2④,3,12,45},其中两个2的前后顺序保持一致。
使用场景
在数组包含的元素数量较小情况下,可以选择插入排序,元素数量较大的情况下,不适用,因此时移动元素的次数较多;
在数组基本有序的情况下,适合使用插入排序,此时时间复杂度基本上为O(n)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java复习基础篇——反射
下一篇:MyBatis:参数传递 [转]
- B树和B+树的插入、删除图文详解 2020-06-09
- 如何快速安全的插入千万条数据? 2020-06-03
- 基础排序算法(附加java实现) 2020-06-02
- LeetCode 面试题53 - I. 在排序数组中查找数字 I 2020-05-22
- LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 2020-05-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash