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

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

插入排序

最近在复习算法导论,总结一下经验蛤

插入排序的模式就像是排序一手扑克牌 , 设总共牌库数量为n 当前抽中的牌下标为 i, 有以下论证

  • 手中的牌是有序的,并且为[0...i], 手中牌数量为(i)
  • 剩余的牌库是无序的,并且为[i+1...n], 剩余牌数量(n - i - 1)

整个过程可以概括为:

从剩余牌库中依次循环抽取牌,循环
n-1次, 抽取中的牌依次比较手中牌的大小,循环次数不定( 因为手中牌是有序的,比较成功就会退出循环 ),最多为
i-1

使用Java实现算法则为:

public class InsertionSort {  public static int[] sort(int[] p) {    for (int i = 1; i < p.length; i++) {      int currentValue = p[i];      int index = i;      while (index > 0 && currentValue < p[index - 1] ) {        int a = 0;        a = p[index];        p[index] = p[index - 1];        p[index - 1] = a;        index--;      }    }    return p;  }  public static void main(String[] args) {    int[] b = InsertionSort.sort(new int[]{5, 2, 4, 6, 1, 3});    for (int i : b) {      System.out.println(i);    }  }}

根据循环不变式可以验证以上代码( 使用上面代码的变量 )

  • 初始化 : 在i=1时证明循环不变式成立, 手中牌为5,单个元素,排序自然成立.
  • 保持: 证明每次循环迭代循环不变式成立, 测试几条数据如下成立
手中牌: [5]      [2,5]正在抽中的牌: [2]  [4]牌库中的牌: [4,6,1,3]  [6,1,3]
  • 终止: 导致外层循环终止的原因是 i < p.length, i = 1, i ++, 必有i > p.length的一刻,认定排序了整个数组.在内层排序手中牌的循环终止原因是index > 0 && currentValue < p[index - 1] index是当前的手牌下标(下标从1开始), index--;必有index <= 0的一刻,认定排序了整个手中牌数组

转载地址:http://nptbx.baihongyu.com/

你可能感兴趣的文章
IntPtr 转 string
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
查看>>
struts1——静态ActionForm与动态ActionForm
查看>>
七大关键数据 移动安全迎来历史转折点
查看>>
在AngularJS中学习javascript的new function意义及this作用域的生成过程
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
1、下载安装scala编译器(可以理解为scala的jdk),地址:http://www.scala
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
实战Django:小型CMS Part2
查看>>