【排序算法1】插入排序


【排序算法】插入排序

package test;

import java.util.Random;

/**
 * 插入排序是这样实现的:
 * 1、首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")。
 * 2、从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。 3、重复2号步骤,直至原数列为空。
 * 插入排序的平均时间复杂度为平方级的,效率不高,但是容易实现。 它借助了"逐步扩大成果"的思想,使有序列表的长度逐渐增加,直至其长度等于原列表的长度。
 * 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k
 * ,并且在寻找这个位置 k 的 过程中逐个将比较过的元素往后移一位,为元素 x “腾位置”,最后将 k 对应的元素值赋为 x ,
 * 一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1)。
 * 
 */
public class ChaRuPaiXu {

	public static void main(String[] args) {

		//定义原数列大小
		int size = 10;
		
		// 定义原数列
		int[] src = new int[size];
		for(int i = 0;i<size;i++){
			src[i] = new Random().nextInt(100);
		}
		
		int[] aim = chaRuPaiXu(src);

	}

	private static int[] chaRuPaiXu(int [] src) {
		int count = 0;
		int[] aim = new int[src.length];		// 定义排序列
		aim[0] = src[0];						// 实始化第一个数据
		
		for (int i = 1; i < src.length; i++) {	// 遍历原数列			
			int x = src[i];						// 记录i对应的元素 x			
			int k = 0;							// 定义正确位置 k		
			for (int j = i - 1; j >= 0; j--) {	// 遍历排序列		
				count++;if (x < aim[j]) {				// x与排序列数据进行比较		
					aim[j + 1] = aim[j];		// 元素往后移一位			
					k = j;						// 记录k
				} else {			
					k = j + 1;					// 记录k
					break;
				}
			}	
			aim[k] = x;							// 将 k对应的元素值赋为 x
		}
		System.out.println("插入排序循环次数:"+count);
		return aim;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值