package chapter1;
/**
* 插入排序
*
* 有一个n为数组,对其按照升序排列
*
* 方法:从大小为1的子数组A[0]开始排序,因为A[0]就只有一个元素,所以是有序的
*
* 接下来,讲A[1]插入到A[0]的前面后者后面,这取决于A[1]与A[0]的大小
*
* 继续此过程,将A[i]插入到A[0···i-1]子数组中·····
*
* 元素的比较次数取决于输入元素的顺序
*
* 当输入序列按照非降序排列时,元素比较的次数最小,需比较n-1次
*
* 当输入序列按照降序排列,且所有元素都不相同,比较的次数最大。为n(n-1)/2
*
* @author guanya.zhou
* @date 2016年11月14日
* @Description TODO
*/
public class InsertionSort {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 6, 5, 4, 7, 8, 9, 10, 9, 8, 20, 18, 16, 14, 12, 10 };
for (int i = 2; i < arr.length ; i++) { //第一个元素默认就是有序的,从第二个元素开始
//从第二个元素开始,依次与这个元素之前的元素对比
int j = i - 1;
int x = arr[i];
while (j > 0 && arr[j] > x) { //当前元素大于在他之前的元素
arr[j + 1] = arr[j]; //与当前元素做比较的元素往后挪动
j--;
}
arr[j + 1] = x;
}
for(int element : arr) {
System.out.print(element + " ");
}
}
}