1.1. 基本描述
元素个数为n的数组,需要按照由小到大的顺序进行元素排序。
1.2. 算法分析
直接插入排序的基本思想:将数组看成已排序与未排序两个部分,依次将未排序的元素插入到已排序部分的合适位置,插入新元素需要将插入位置之后的元素依次后移。最好情况下(数组升序),时间复杂度为O(n);最坏情况下(数组降序),时间复杂度为O(n^2);平均时间复杂度为O(n^2)。是稳定排序。
1.3. 代码实现
public class InsertionSort {
public static void main(String[] args) {
Integer[] unSortedArr = new Integer[]{1,2,10,9,8,5,6,7,3,4};
int beginIndex = 1; // 这里约定待排序数组一定不止一个元素,只要一个元素无排序必要
while (beginIndex < unSortedArr.length) {
int tempElement = unSortedArr[beginIndex];
int insertIndex = beginIndex;
// 逐一与已排序部分比较,找到插入点
// 当待插入元素(e)比已排序部分某一元素(s)大时,找到插入点,插入位置为s的后面
for (int i = beginIndex - 1; i > -1; i--) {
if (unSortedArr[beginIndex] > unSortedArr[i]) {
insertIndex = i + 1;
break;
}
}
// 将插入点之后全部元素依次后移一位
for (int j = beginIndex; j > insertIndex; j--) {
unSortedArr[j] = unSortedArr[j - 1];
}
// 将新元素插入到插入点
unSortedArr[insertIndex] = tempElement;
beginIndex ++;
}
StringBuffer stringBuffer = new StringBuffer();
for (int k = 0; k < unSortedArr.length; k++) {
stringBuffer.append(unSortedArr[k]).append(" ");
}
System.out.println(stringBuffer.toString());
}
}