小白排序之插入排序
来源:互联网 发布:动漫下载软件 编辑:程序博客网 时间:2024/05/20 04:13
插入排序,何谓插入排序呢?即我假定现在的数据已经排好,我只需要将新数据排进合适的位置即可。详细见下文。
首先,我拿到一个包含n个元素的数组,索引分别为0,1,2,...n-1。我首先假定数组的第一个元素以及排好顺序,这是显然的。然后我将数组的第二个元素与第一个元素进行排序,这很简单吧。于是我们得到了一个排好序的二元子数组。再然后,我们拿出第三个元素,插入到排好序的二元数组中,怎么插入呢?无非就是比较,然后记下索引,插入即可,由于数组具有索引(即下标),插入与交换有些不同,交换只涉及到两个元素,这里的插入是将后面的元素放到合适位置上,该位置的原有元素直到要插入的元素整体向后推一位。这样迭代下去,直到将最后一个元素插入到数组中。
public static void insertSort(int[] array){for(int i = 1; i< array.length; i++){int currentValue = array[i];int position = i;for (int j = i - 1; j >= 0; j--) { if (currentValue<array[j]){array[j+1] = array[j];position = j;}elsebreak;}array[position] = currentValue;}}首先,还是两层循环,外循环负责整个数组的遍历,内循环负责已经排序好的子数组的遍历。
为什么内循环要从后往前遍历呢?原因是我们正序排列数组,插入时被插入位置之后的元素都要向后推一位,而之前的数组我们保持不动,故从后往前遍历更为有效。
为什么要定义position呢?跟选择排序一样是为了记住要插入的位置。
为什么要定义currentValue呢?因为有可能在内循环第一次循环时,我们要插入的数据就被覆盖掉了,相当于用一个临时变量记下要插入的数据。
主函数测试代码同选择排序。
0 0
- 小白排序之插入排序
- 小白成长之路(5)--插入排序(直接插入,二分插入,希尔排序)
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- 排序之插入排序
- Activiti源码分析
- OC与swift混编
- 其他形式的链表
- javaweb学习总结(四十五)——监听器(Listener)学习二
- INEQUALITY PROOF
- 小白排序之插入排序
- 纯干货!面试官如何面试程序员
- 1. Two Sum
- VMware下ubuntu扩展磁盘空间
- 使用自定义模板为Myeclipse添加新建Filter的功能
- 将本地代码push到GitLab空仓库
- 抽象类和接口联系与区别
- Designing for Multi-Window
- 笔试面试题8--内联函数和宏的区别