插入排序是一种最简单直观的排序算法,它的工做原理是经过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。java
插入排序方法:算法
public static int[] insertionSort(int[] elements) { int temp = 0; if(null == elements || 1 >= elements.length) { // do nothing } else { System.out.println("elements:"+Arrays.toString(elements)); System.out.println("------------------------------------------------"); // 从数组的第二个元素开始遍历,直至数组末尾 for(int i=1 ;i<elements.length; i++) { System.out.println("当前遍历元素["+i+"]:"+elements[i]); // 当前元素的序号 int nowIndex = i; // 前一位元素的序号 int preIndex = i-1; while(preIndex >= 0) { if(elements[nowIndex] < elements[preIndex]) { // 假若当前元素比前一元素小,则将二者交换 temp = elements[preIndex]; elements[preIndex] = elements[nowIndex]; elements[nowIndex] = temp; // 继续向前比较元素大小 nowIndex = preIndex; preIndex = preIndex - 1; } else { preIndex = -1; } } System.out.println("elements="+Arrays.toString(elements)); System.out.println("------------------------------------------------"); } } return elements; }
测试代码:数组
public static void main(String[] args) { int[] array = {82 ,31 ,29 ,71, 72, 42, 64, 5, 110}; insertionSort(array); }
结果:测试
elements:[82, 31, 29, 71, 72, 42, 64, 5, 110] ------------------------------------------------ 当前遍历元素[1]:31 elements=[31, 82, 29, 71, 72, 42, 64, 5, 110] ------------------------------------------------ 当前遍历元素[2]:29 elements=[29, 31, 82, 71, 72, 42, 64, 5, 110] ------------------------------------------------ 当前遍历元素[3]:71 elements=[29, 31, 71, 82, 72, 42, 64, 5, 110] ------------------------------------------------ 当前遍历元素[4]:72 elements=[29, 31, 71, 72, 82, 42, 64, 5, 110] ------------------------------------------------ 当前遍历元素[5]:42 elements=[29, 31, 42, 71, 72, 82, 64, 5, 110] ------------------------------------------------ 当前遍历元素[6]:64 elements=[29, 31, 42, 64, 71, 72, 82, 5, 110] ------------------------------------------------ 当前遍历元素[7]:5 elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------ 当前遍历元素[8]:110 elements=[5, 29, 31, 42, 64, 71, 72, 82, 110] ------------------------------------------------