您的位置:首页 > 其它

【排序算法1】插入排序

2015-06-19 14:16 344 查看
【排序算法】插入排序

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: