排序:插入排序

插入排序是一种最简单直观的排序算法,它的工做原理是经过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。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]
------------------------------------------------