直接插入排序

直接插入排序是将一个记录插入到已排好序的有序表中,从而得到一个新的,记录增1的有序表。

public class StraightInsertionSort {

	public static void main(String[] args) {
		int nums[] = {98, 35, 4, 34, 29, 35};
		InsertSort(nums);		
	}
	public static void InsertSort(int[] a) {
		if(a.length!=0) {//一定要先判断,判断数组是否为空
			int j, k;
			for (int i = 1; i < a.length; i++) {//控制趟数
				for (j = i - 1; j >= 0; j--) {//比较大小
					if (a[i] >= a[j]) {//一定是>=,这样才能在两个数字一样大的情况下,不用交换位置,保证了排序的稳定性
						break;
					}
				}
				int temp = a[i];
				for (k = i - 1; k > j; k--)//移动次数
					a[k + 1] = a[k];
				a[k + 1] = temp;
				for (int n = 0; n < a.length; n++) {//输出每一趟的结果,每趟结果输出一行
					System.out.print(a[n] + " ");
				}
				System.out.println();
			}
		}
	}
}

整个排序过程为进行n-1趟插入,即:先将序列中的第1个记录看成是一个有序的子序列,然后从第2个记录起逐个插入,直至整个序列变成按关键字非递减有序序列为止。从空间上来看,它只需要一个记录的辅助空间,监视哨a[0],因此空间复杂度为O(1)。从时间来看,排序的基本操作为:比较两个关键字的大小和移动记录。在整个排序过程中,当待排序列中记录按关键字非递减有序排列时,所需进行关键字的比较次数达到最小为n-1,,记录不需有移动;反之,当待排序列中记录按关键字非递增有序排列时,总的比较次数最大(n+2)(n-1)/2,记录移动次数也达到最大值(n+4)(n-1)/2。若待排序列是随机的,则取最大最小值的平均值,所以时间复杂度为O(n*n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值