博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法导论1--插入排序
阅读量:6496 次
发布时间:2019-06-24

本文共 1484 字,大约阅读时间需要 4 分钟。

hot3.png

插入排序算法 伪代码

a 需要排序的数组for j=1 to a.length    //insert a[j] to  a[0,1...j-1] {循环不变式}    key=a[j]    i =j-1        while i>=0 and a[i]>key            a[i+1]=a[i]            i=i-1      a[i+1]=key    // 其中 a[0,1...j] 表示 a 的子数组    // and or 具有短路功能    // 变量没有特殊声明,都是局部变量    // 数组下标 是从0开始

循环不变式和数学归纳法

**循环不变式,辅助我们理解算法的正确性**循环不变式必须要满足3条性质:1. 初始化:它在循环的第一轮迭代开始之前,应该是正确的。2. 保持:如果在某一次循环迭代开始之前是正确的,那么在下一次迭代开始之前,它也应该保持正确(假设当循环变量等于k时符合,再看执行一遍循环体后是否还符合循环不变式)。3. 结束:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的针对此题,其数学化表示为:1. 当 j=0时,A[0]已正确排序2-1. 假设 j=k时,A[k]插入A[0,1,2,...k],能使子列正确排序2-2. 当j=k+1时,验证A[k+1]插入A[0,1,2,...,k,k+1]能否使子列正确排序    key=a[k+1]    i =k        while i>=0 and a[i]>key            a[i+1]=a[i]            i=i-1      a[i+1]=key    这轮排序,确实可以使排序成功3. 当循环结束时,确实能使整个数组都正确排序

java 代码

public class Test {    public static void main(String[] args) {        Test t = new Test();        int[] a = new int[] { 1, 3, 5, 6, 7, 43, 2 };        t.sort(a);        t.out(a);    }    public void sort(int[] a) {        if (a.length <= 1) {            return;        }        for (int j = 1; j < a.length; j++) {            int key = a[j];            int i = j - 1;            //反向扫描            while (i >= 0 && a[i] < key) {                a[i + 1] = a[i];                i--;            }            a[i + 1] = key;        }    }    public void out(int[] a) {        for (int i : a) {            System.out.print(i + " ");        }        System.out.println();    }}

转载于:https://my.oschina.net/u/3706181/blog/1596693

你可能感兴趣的文章
OrderOnline——项目概述
查看>>
POJ-2739(Water)
查看>>
【转】第三节 UNIX文件系统结构
查看>>
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录
查看>>
Angular7里面实现 debounce search
查看>>
Linux 内核链表
查看>>
git学习------>Git 分支管理最佳实践
查看>>
括号和出栈所有序列问题
查看>>
第一次操刀数据库分表的教训与经验
查看>>
录音声音小
查看>>
Ubuntu 12.04 安装 Chrome浏览器
查看>>
java 反射
查看>>
ORACLE物化视图(物理视图)
查看>>
android 读取json数据(遍历JSONObject和JSONArray)(转)
查看>>
UIScrollView中的手势
查看>>
递归和迭代的差别
查看>>
基于jquery的可拖动div
查看>>
可以简易设置文字内边距的EdgeInsetsLabel
查看>>
[詹兴致矩阵论习题参考解答]习题1.3
查看>>
Android Fragment的使用
查看>>