插入排序的基本思想:首先选择第一个元素作为有序部分,从第二个元素开始到结尾作为无序部分。从无序部分的第一个元素开始,和有序部分的最后一个元素开始向前进行比较,直到找到正确的位置为止。
/**
* 对从开始位置和结束位置的元素进行排序
* @param a 原始数组
* @param first 开始位置
* @param last 结束位置
*/
public static void insertionSort(int[] a,int first, int last){
for(int unSorted = first+1; unSorted < last; unSorted++){
int firstUnSorted = a[unSorted];
insertInOrder(firstUnSorted,a,first,unSorted-1);
}
}
/**
*
* @param element 当前无序部分的元素
* @param a 原始数组
* @param begin 有序部分的开始位置
* @param end 有序部分的结束位置
*/
public static void insertInOrder(int element, int[] a, int begin, int end) {
int index = end; //从有序部分最后一个元素开始向前进行比较
while((index >= begin) && (element < a[index])){
a[index+1] = a[index];
index--;
}
a[index+1] = element;
}
时间复杂度:O(n^2)