直接插入排序

插入排序的基本思想是:每次设法把一个数据元素插入到已经排序的部分序列的合适位置,使得插入后的序列仍然是有序的。依据寻找插入位置方法的不同,有多种不同的插入排序方法。

直接插入排序

基本思想:开始时把第一个数据元素作为初始的有序序列,然后从第二个数据元素开始一次把数据元素按关键字大小插入到已排序的部分排序表的适当位置。当插入第i个数据元素时,前面的i-1个数据元素已经排好序了,这时,用第i个数据元素的关键字与前面的i-1个数据元素的关键字顺序进行比较,找到插入位置后就将第i个数据元素插入。如此进行n-1次插入,就完成了排序。

代码:

public class App 
{
	
	public static void main(String[] arg) {
		int [] array= {46,31,6,19,23,31};
		insertSort(array);
		System.out.println(Arrays.toString(array));

	}
	
	static void insertSort(int [] array) {
		for(int i=1;i<array.length;i++) {
			int temp=array[i];
			int j=i;
			while(j>0 && array[j-1]>temp) {
				array[j]=array[j-1];
				j--;
			}
			array[j]=temp;
		}
	}

}

输出:

[6, 19, 23, 31, 31, 46]

时间复杂度分为最好和最坏的情况。

最好的情况是排序表已经按照关键字从小到大排好序了,时间复杂度为O(n)。

最坏的情况是在第i趟插入时,第i+1个数据元素必须与前面i个数据元素比较,然后移动,此时时间复杂度为O(n^2)。

因此,初始数据表越接近有序,直接插入排序的效率越高。直接插入排序是一种稳定的排序方法。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值