插入排序

插入排序
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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值