/***
* 插入排序
*
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前扫描
* 如果该元素(已排序)大于新元素,将该元素移到下一位置
* 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
* 将新元素插入到该位置中
* 重复步骤2
* @param numbers
*/
public static void insertSort(int[] numbers) {
System.out.println(numbers);//[3, 6, 4, 2, 11, 10, 5]
int size = numbers.length;
int temp, i ,j;
for(i = 1; i< size; i++) {//默认第一个i=0已排序,从i=1第二个开始
temp = numbers[i];
for(j = i; j>0 && numbers[j-1] > temp; j--) {
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
System.out.println(numbers);//[2, 3, 4, 5, 6, 10, 11]
}
//测试
public static void main(String[] args) {
int[] numbers = {3,6,4,2,11,10,5};
insertSort(numbers);
}
1、当n <= 50时,适合适用直接插入排序和简单选择排序,如果元素包含的内容过大,就不适合直接插入排序,因为直接插入排序需要移动元素的次数比
2、当数组基本有序的情况下适合使用直接插入排序和冒泡排序,它们在基本有序的情况下排序的时间复杂度接近O(n).
摘自:https://www.cnblogs.com/chenxuyuan/p/5017754.html