插入排序
1.原理
插入排序的思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.
一般情况下将数组的第一个元素作为起始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,
所以只是要从右向左找到比待插入值小(对升序而言)的第一个数组元素就插入到其后面.
直到将最后一个数组元素插入到数组中,整个排序过程就算完成.
1.原理
插入排序的思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.
一般情况下将数组的第一个元素作为起始元素,从第二个元素开始依次插入.由于要插入到的数组是已经排好序的,
所以只是要从右向左找到比待插入值小(对升序而言)的第一个数组元素就插入到其后面.
直到将最后一个数组元素插入到数组中,整个排序过程就算完成.
2.java代码实现
public static void insertSort(int arr[]){
int length = arr.length; //数组长度
int i; //当前值的位置
int j; //指向i前的位置
int currentNode; //当前要进行插入排序的值
//从数组的第二个位置开始遍历值
for(i=1; i<length; i++){
currentNode = arr[i];
j = i - 1;
//a[j]比当前值大时,a[j]后移一位,空出j的位置,好让下一次循环的值后移
while(j>=0 && currentNode<arr[j]){
arr[j+1] = arr[j]; //将arr[j]值后移
j--; //j前移
}
arr[j+1] = currentNode; //将当前值插入
}
}
public static void main(String[] args) {
int[] arr = {800,9,3,6,12,54,35,411,3,245,1,0,4};
insertSort(arr);
for(int a : arr){
System.out.print(a + ",");
}
}
时间复杂度
在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前 N - 1 个元素。因此,最坏情况下的比较次数是 1 + 2 + 3 + ... + (N - 1),等差数列求和,结果为 N^2 / 2,所以最坏情况下的复杂度为 O(N^2)。
最好情况下,数组已经是有序的,每插入一个元素,只需要考查前一个元素,因此最好情况下,插入排序的时间复杂度为O(N)