直接插入排序
来源:互联网 发布:临床医学英国留学 知乎 编辑:程序博客网 时间:2024/06/16 09:35
上回书说道了冒泡排序以及局部冒泡排序,现在呢我们来谈一谈直接插入排序。
【基本思想】
每一趟将一个待排序的数字,按照其关键之大小,插入到已有序序列的适当位置,直到所有数字都已经插入完毕。
设有一个数组a[0...n-1],大致分为以下三步:
1.初始时刻认为a[0]有序,无序区为a[1...n-1]
2.将a[i]插入到有序区a[0...i-1],形成有序区a[0...i]
3.i++,重复以上步骤,直到i=n-1
【基本代码】
以下是排序的代码:
public class InsertSort{ public static void main(String[] args){int array[]={9,4,5,6,8,3,2,7,10,1};for(int i=1;i<array.length;i++)//第0位独自作为有序数列,从第1位开始向后遍历 { if(array[i]<array[i-1])//0~i-1位为有序,若第i位大于i-1位,继续寻位并插入,否则认为0~i位也是有序的,忽略此次循环,相当于continue { int temp=array[i];//保存第i位的值 int k = i - 1; for(int j=k;j>=0 && temp<array[j];j--)//从第i-1位向前遍历并移位,直至找到小于第i位值停止 { array[j+1]=array[j]; k--; } array[k+1]=temp;//插入第i位的值 } System.out.print("第" + i + "次排序结果:"); for(int a = 0; a < array.length; a++){ System.out.print(array[a] + "\t"); } System.out.println(""); }System.out.print("最终排序结果是:"); for(int a = 0; a < array.length; a++){ System.out.print(array[a] + "\t"); } } }
排序结果如下图:
从上图可以很明白的看出,每趟排序过后,在有序区相应位置插入后一数字,同时认为第一个数是一个有序区。如果这静态的图不能让你理清思路的话可以看这里。
【总结】
直接插入排序算法简单,易于理解和实现,它的时间复杂度为O(n^2),由于时间复杂度的原因,不适合用于数目较大的排序;空间复杂度为O(1),它是一个稳定的算法。
0 0
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- Cannot find class 'org.junit.Test' on project build path
- Eclipse如何创建并部署web project
- XAMPP+TestLink安装步骤
- Android教程-03 常见布局的总结
- ajax传json的方法(附list转json方法)
- 直接插入排序
- 关于图像特征提取
- 粒子群优化PSO
- 【转】最值得你所关注的10个C语言开源项目
- hdu 5476
- python 操作 编辑器
- 通过UIView 来获取 Controller
- 隐马尔可夫模型攻略
- 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法