java插入排序
来源:互联网 发布:中文域名收录 编辑:程序博客网 时间:2024/06/14 06:38
插入排序
插入排序核心思想:
初始数列: {{a1}, {a2, a3, a4, ..., an}}第一趟排序: {{a1, a2}, {a3, a4, ..., an}}
第二趟排序: {{a1, a2, a3}, {a4, ..., an}}
...
倒数第二次排序: {{a1, a2, a3, a4, ...}, {an}}
最后一次排序: {{a1, a2, a3, a4, ..., an}}
归纳步骤:
1:从第一个下表开始,把元素插入到有序序列中
2:将第n个元素插入到有序序列中.
(1)从处理元素开始,与前面的所有元素进行比较,移位
(2)与之前的第m个元素进行比较
如果大于:不变
如果小于:互换值
(3)重复步骤(2)直到第一个元素
3:重复步骤2直到将最后一个元素插入有序序列 循环结束.
实现伪算法:
INSERT INTO(A):FOR i=1 TO length[A]-1DO key=A[i] j=i-1 WHILE j>0 AND A[j]>keyDO A[j+1]=A[j] j-- A[j+1]=key
验证算法的正确性:
利用循环不变式进行算法的验证:
初始化:有序数列只有一个元素, 有序.
保持: 假设在循环迭代的某一个次开始之前, 有序数列是有序的, 那么需要证明, 在进行下一次循环迭代开始前也是有序的.
将元素一次与之前的元素进行比较, 当小于的时候,互换;知道找到插入的位置 插入. 也是有序的.
循环退出结束:当无序数列中的所有元素都排序完成, 循环退出.得到有序数列.
实现算法java:
//插入排序public class InsertSortor {// 主线程方法public static void main(String[] args) {int[] a = new int[] { 4, 8, 0, 1, 3, 9 };InsertSortor.insertSort(a);InsertSortor.printArr(a);}// 打印数组public static void printArr(int[] a) {for (int temp : a) {System.out.print(temp + ", ");}}// 插入排序算法public static void insertSort(int[] a) {// 从下标为1开始, 将元素插入到有序序列中, 循环直到最后一个元素.for (int i = 1; i < a.length; i++) {// 从要插入元素i开始, 将元素与之前的所有元素进行比较和移位, 循环直到第二个元素与第一个元素进行比较.for (int j = i; j > 0; j--) {// 如果前一个元素, 小于后一个元素, 则互换元素if (a[j] < a[j - 1]) {int temp = a[j];a[j] = a[j - 1];a[j - 1] = temp;}// 如果前一个元素, 大于后一个元素, 则直接跳出内层循环,继续下一次外层循环else {break;}}}}}
0 0
- Java排序--插入排序
- 排序-插入排序-Java
- 插入排序--直接插入排序[Java实现]
- 插入排序--折半插入排序[Java实现]
- java插入排序之直接插入排序
- 【插入排序】直接插入排序--Java
- 【插入排序】二分插入排序--Java
- 插入排序----直接插入排序----java实现
- [java]插入排序及折半插入排序
- java插入排序--直接插入排序
- Java插入排序
- java插入排序算法
- JAVA 插入排序
- JAVA插入排序分析
- java实现插入排序
- 插入排序java
- java 插入排序
- 插入排序(java)
- 图片的处理
- poj2955,括号匹配,区间dp
- linux内存查看及说明
- C#对Socket操作的封装
- Linux下源码安装Nginx的步骤
- java插入排序
- 太牛了,你看过这样的比赛吗?不看不知道看了吓一跳!
- 图文解释XCode常用快捷键的使用
- excel的读操作
- Android 几种图像特效处理的集锦
- scu(snoop control unit)
- Hu矩
- 黑马程序员_面向对象_多线程2
- 【实用随记】js菜单联动