算法基础-使用循环不变式解决插入排序问题
来源:互联网 发布:mysql trigger 判断 编辑:程序博客网 时间:2024/06/07 05:38
思想是直接插入排序,即每次拿一个数字向已排序好的数字中插入,采用循环不变式的设计思想。
循环不变式:一般而言,用这个式子表示希望得到的结果,如果在循环的每一步,这个式子都是正确的,那么循环结束后,这个式子也正确,并得到了期望的结果。
如何证明循环的每一步式子都是正确的?
需要证明式子满足三个性质:
初始化:循环的第一次迭代之前,它为真。
保持:如果循环的某次迭代之前它为真,那么下次迭代仍然为真。
终止:证明循环终止时,是期望结果。
代码:
package com.zjq.arithmetic.sort;public class Insert_Sort {public static void main(String[] args) {int[] eg={3,2,4,5,1,6};Insert_Sort insert_Sort=new Insert_Sort();eg=eg=insert_Sort.insertSort(eg);for(int m=0;m<eg.length;m++){System.out.println(eg[m]);}}/**循环不变式 * @param array * @return */public int[] insertSort(int[] array){for(int i=1;i<array.length;i++){int k=array[i];int j=i-1;while(j>=0&&array[j]>k){array[j+1]=array[j];j=j-1;}array[j+1]=k;}return array;}}只要循环之前array[i-1](下标是原数组的0至i-1)是排序好的数组,那么下次循环得到array[i](下标是原数组的0至i)仍然是排序好的数组,并且循环结束时得到的是整个排序好的数组。
此代码满足循环不变的三个性质。
1 初始化:循环下标从1开始,初始时候下标0,数组只有一个数array[0],当然是排序好的。
2 保持:每次循环是将新的数字插入到上一次排序好的数组中,得到让然是排序好的数组。
3 终止;循环终止时候,得到的是原数组排序好的数组,符合期望。
阅读全文
1 0
- 算法基础-使用循环不变式解决插入排序问题
- 算法导论-循环不变式、插入排序、归并排序
- 插入排序与循环不变式
- 《算法导论》读书笔记(一)——插入排序与循环不变式
- 插入排序InsertSort的三种实现方式及循环不变式的使用
- 插入排序证明引发的对于循环不变式的定义
- 基础算法-插入排序
- 基础算法-插入排序
- 【基础算法】插入排序
- 【算法基础】插入排序
- 【基础算法】-- 插入排序
- 算法基础-直接插入排序
- 算法基础 2.1插入排序
- 基础算法-直接插入排序
- 基础算法之插入排序
- 算法基础之插入排序
- 算法基础2:插入排序
- 【基础算法】-- 折半插入排序
- Java NIO系列教程(5):通道之间的数据传输
- Vue生命周期
- Python内存数据结构--字典
- 裴波那契数列的递归实现与非递归实现
- Halloween Costumes 区间dp
- 算法基础-使用循环不变式解决插入排序问题
- java-Socket通信,同时进行Json数据的传递
- Hadoop基础教程-第14章 大数据面试笔试题汇总(持续更新)
- caffe2 学习笔记03-从图片如何到mdb数据集
- tomcat部署项目,并修改端口号
- Python字符串逆序输出
- java中byte转int时候为什么要&0xff
- React Native Reducer结构较深与render map展示刷新问题
- RDLC——最简单实例