算法题2 插序算法
首先分析插序算法的原理:
举例:int [] ints = {0,1,3,4,9,3,2,3,5,1,0};
for循环进行遍历,判断相邻两个值得大小,如果前面的小于后面的,就开始进行阶循环。
即9,3时,也就是i循环
for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//此时进入阶循环 j}}
阶循环时,从0,1,。。。4,9,进行循环,判断其中j位上的值比i位上的值大的那一位。
for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//此时进入阶循环 jif(ints[j]>ints[i]) {}}
这时需要找到介于阶循环中的j ,j 位的值比i位的值大。
需要交换的是j位于i位;j与i位之间的需要后移。先后移即i-1 移到i,直到j+1 移到j+2;最后交换j与i位。
for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//当i位的值小于i-1位的值时,开始进行阶循环for (int j = 0; j <=i-1; j++) {//当j位的值大于i位的值时if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;}}}}
最后写成方法:
static int[] insertion(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//当i位的值小于i-1位的值时,开始进行阶循环for (int j = 0; j <=i-1; j++) {//当j位的值大于i位的值时if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;}}}}return ints;}
还没有结束,检查方法中冗余的计算,发现可以中断一些后面没用的循环,不是i,也不是k,而是j.
static int[] insertion(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//当i位的值小于i-1位的值时,开始进行阶循环for (int j = 0; j <=i-1; j++) {//当j位的值大于i位的值时if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;break;}}}}return ints;}
最后进一步优化,减少一步循环
static int[] insertion2(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {for (int j = i; j >0; j--) {if(ints[j]<ints[j-1]) {int temp=ints[j-1];ints[j-1]=ints[j];ints[j]=temp;}}}return ints;}
算法题2 插序算法相关推荐
- 【常见笔试面试算法题12】动态规划算法案例分析
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 文章目录 1.暴力搜索方法 2.记忆搜索方法 3.动态规划方法 4. ...
- leetcode算法题--二叉树中序遍历迭代法
原题链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 二叉树中序遍历迭代法,栈实现 vector<int> ...
- leetcode算法题--从先序遍历还原二叉树
原题链接:https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal/ 迭代 + 栈 TreeNode* recov ...
- 90 个名企笔试题和算法题
名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...
- 目录:名企笔试 + 算法题
名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑菇街201 ...
- 搬:90 个名企笔试题和算法题
名企笔试 名企笔试:美团2016招聘笔试(股票交易日) 名企笔试:搜狐2016招聘笔试题(扎金花) 名企笔试:凤凰网2015招聘(二分查找) 名企笔试:4399游戏校招笔试题(快速排序) 名企笔试:蘑 ...
- 字节跳动2021年4月面试算法题库
本文汇总了牛客2021.4.1~2021.4.30 面经考到的Leetcode题目 最终的高频题榜单数据可以在CodeTop题库(https://codetop.cc)查询,支持按部门.岗位分类筛选. ...
- leetcode贪心算法题集锦(持续更新中)
leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...
- 程序员面试需要刷力扣算法题吗
这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
最新文章
- runtime系统的Cello
- 如何利用离散Hopfield神经网络进行数字识别(2)
- 以前不知道的,现在知道了(微机原理)
- .NET特性:异步流
- ios移动输入框被软键盘遮挡
- 阿里云上测试服务器的搭建
- Python 初学者的最佳学习资源
- boost::gregorian模块实现日期相关的测试程序
- 【SSL】java keytool工具创建自己的(localhost)(JKS)证书库
- Java23种设计模式之概念篇
- KubeEdge 1.3.0 部署
- Python面向对象之结构与成员
- 智能锁行业安全分析报告
- 优酷ts转换mp4_下载腾讯视频并转成MP4
- VS2013 C++工程调试加断点不能停
- ListView 优化之 ViewHolder 复用机制
- 微软快捷键截图_如何在Microsoft Office的屏幕提示中显示快捷键
- Lee滤波和Refine-Lee滤波
- Pisces-ORM的思考与设计
- 内存的永久保存区内存溢出解决
热门文章
- 程序员每天少吃 能活120岁
- 7月送书中奖名单,快看!
- linux多线程冗余,Linux 下的路径冗余
- java接口自动化demo_第一个java 接口自动化程序
- python中iloc的详细用法_python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)...
- 优化算法笔记|萤火虫算法理解及实现
- python-opencv图像处理之SIFT尺度不变特征变换
- P53:进化了8亿年的抑癌基因
- 送书 | 人类细胞图谱计划发起人Aviv Regev博士讲单细胞基因组学
- SIP系统怎么禁用?SIP系统完整性保护关闭方法(含M1)