【排序算法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; } }
相关文章推荐
- 巧妙使用Firebug插件,快速监控网站打开缓慢的原因
- MyBatis Generator
- python实例26[计算MD5]
- 图像像素值的反转
- 预定义异常 - PHP手册笔记
- mvn
- Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来)
- [转]免费接口API
- iOS三级联想菜单(SkyAssociationMenuView)
- 析构函数什么时候调用
- xcode 6.3 打包发布闪退
- 数据结构基础(4)C语言实现栈--链式存储(动态栈)
- 获得年天数、月天数
- JavaScript中的apply和call函数详解(转)
- C#: MessageBox
- dm8148 多通道解码测试记录
- python类库26[读写Excel]
- Learning Spark 学习笔记 第三章 RDDs编程
- C#判断某元素是否存在数组中
- IntelliJ IDEA快捷键(常用)