排序学习1之插入排序

预备知识
我们描述的算法都将是可以互换的。每个算法都将接受包含一些元素的数组;假设所有的数
组位置都包含要被排序的数据,并且假设N为传递到排序例程的元素的个数。
被排序的对象属于Comparable类型。因此我们使用CompareTo方法对输入的数据施加相
容的排序。这是除了赋值运算外,仅有的允许对输入数据进行的操作。在这些条件下进行
的排序叫作基于比较的排序。
插入排序详解
1、算法
	在这里,我们先不应基于比较的排序,先通过简单的排序比较完成,便于理解。
插入排序作为最简单的排序方法之一,他是通过N-1趟排序将所有的数据进行排序的。
对于p=0到p=N-1趟,插入排序保证从位置0到位置p之间的元素为已经排好序的元素。
图1-1显示了一个数组经过p次排序后的状态。

在这里插入图片描述
图1-1表达了一般的策略。在第p趟,我们将p上的元素向左移动,直到他在前p+1个元素中的正确位置被找到的地方。java代码如下

public static void isort1(int[] a) {
	
		int j;//标记下标
		//从数组中第二个元素开始遍历该数组
		for(int p=1;p<a.length;p++) {
			int tmp = a[p];//记录需要移动的元素的值
			//将第p个之前的元素与第p个之前的元素进行比较
			for(j=p;j>0&&tmp<a[j-1];j--) {
				
				a[j]=a[j-1];
				a[j-1]=tmp;
			}
			for(int s:a) {
				System.out.print(s+"	");
			}
			System.out.println("\n");
		}
	}
2、插入排序算法的分析

由于嵌套循环的每一次都花费N次迭代,因此插入排序的时间复杂度为O(N^2),而且这个界是精确的。
另一方面,如果输入数据是已经预先排序的,那么运行的时间为O(N),因为内层for循环的检测总是 立即判断不成立而终止。

3、总结

由上述可知,插入排序的时间复杂度的最坏情况为O(N^2),最好情况为O(N),
平均情况为O(N^2)。空间复杂度为O(1),较稳定。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值