小白排序之插入排序

来源:互联网 发布:动漫下载软件 编辑:程序博客网 时间: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
原创粉丝点击