插入排序

戏子无情 提交于 2020-03-26 08:49:56

 

问题描述:

通过插入排序,从小到大排序一个数组。

 

算法实现:

public static void insertSort(int[] arr) {    int insertValue;    int insertIndex;    for(int i = 1; i < arr.length; i++) {        insertValue = arr[i];        insertIndex = i - 1;        while (insertIndex >= 0 && insertValue < arr[insertIndex]) {            arr[insertIndex + 1] = arr[insertIndex];            insertIndex--;        }        if(insertIndex + 1 != i) {            arr[insertIndex + 1] = insertValue;        }    }}

 

算法解析:

1.默认数组的第一个元素有序,从第二个元素开始进行“比较-插入”操作;

2.针对待插入的值、待插入的位置设置临时变量;

3.循环遍历,将当前待插入有序数组的值,与“已经有序数组”的元素“从后往前”依次比较;

4.若待插入元素小于“已经有序数组”中的元素,则将“已经有序数组”依次向后移动,直到待插入元素不再小于有序数组中的元素;

5.一轮遍历结束后,若有数据发生移动,需要将待插入值插入到相应位置(当待插入元素不小于“已经有序数组”,则无需移动);

6.每次循环体内容结束,则待插入元素加入“已经有序数组”,当执行完数组最后一个元素的相关“比较-插入”后,整个数组有序。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!