简单插入排序

简单插入排序:插入排序属于稳定排序算法,有简单插入排序,二分插入排序,希尔排序。这里是简单插入排序,每次从后面未排序元素中取出一个元素插入到前面已经有序的序列中去。其时间复杂度为O(n 2).

最好情况是,数组已经有序,比较n-1次,复杂度为O(n),最坏情况是,数组逆序,比较n(n-1)/2次,移动了(n+2)(n-2)/2次, 平均情况移动次数为n^2/4,故直接插入排序的时间复杂度为O(n^2)。

  • 直接插入排序法比冒泡和简单选择排序的性能要好一些。
package yoozoo.day1;

public class Test9 {
	
	/*
	 * 每次都拿出一个元素与插入到前面已经有序的序列中去,复杂度为O(n2)
	 * 属于稳定的排序算法,其有简单插入排序和希尔排序,二分插入排序
	 * */
	public static void main(String[] args) {
		// 简单插入排序
		int[] arr = { 1, 4, 2, 8, 12, 9 };
		int[] res =insertSort(arr);
		for(int t = 0 ;t < res.length ; t++){
			System.out.println(res[t]);
		}
	}

	private static int[] insertSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return arr;
		}
		for (int i = 1; i < arr.length; i++) {
			for (int j = i; j > 0; j--) {
				if (arr[j] < arr[j - 1]) {
					int temp = arr[j];
					arr[j] = arr[j - 1];
					arr[j - 1] = temp;
				} else {
					// 接下来是无用功
					break;
				}
			}
		}
		return arr;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值