戳蓝字“CSDN云计算”关注我们哦!

—————  第二天  —————

————————————

人们如何进行扑克牌的排序呢?举个例子,比如我手中有红桃6,7,9,10这四张牌,已经处于升序排列:

这时候,我又抓到了一张红桃8,如何让手中的五张牌重新变成升序呢?用冒泡排序,选择排序,亦或是快速排序?

恐怕正常人打牌的时候都不会那么做。最自然也最简单的方式,是在已经有序的四张牌中找到红桃8应该插入的位置,也就是7和9之间,把红桃8插入进去:

给定无序数组如下:

把数组的首元素5作为有序区,此时有序区只有这一个元素:

第一轮

让元素8和有序区的元素依次比较。8>5,所以元素8和元素5无需交换。

此时有序区的元素增加到两个:

第二轮

让元素6和有序区的元素依次比较。6<8,所以把元素6和元素8进行交换:

6>5,所以把元素6和元素5无需交换。
此时有序区的元素增加到三个:

第三轮

让元素3和有序区的元素依次比较。3<8,所以把元素3和元素8进行交换:

3<6,所以把元素3和元素6进行交换:

3<5,所以把元素3和元素5进行交换:

此时有序区的元素增加到四个:

以此类推,插入排序一共会进行(数组长度-1)轮,每一轮的结果如下:

什么意思呢?让我们以第三轮举例:

在第三轮操作中,我们需要让元素3逐个与有序区的元素进行比较和交换,与8交换、与6交换、与5交换,最终交换到有序区的第一个位置。

但是我们并不需要真的进行完整交换,只需把元素3暂存起来,再把有序区的元素从左向右逐一复制。

第一步,暂存元素3:

第二步,和前一个元素比较,由于3<8,复制元素8到它下一个位置:

第三步,和前一个元素比较,由于3<6,复制元素6到它下一个位置:

第四步,和前一个元素比较,由于3<5,复制元素5到它下一个位置:

第五步,也是最后一步,把暂存的元素3赋值到数组的首位:

显然,这样的优化方法减少了许多无谓的交换。

public static void sort(int[] array){ for(int i=1;i<array.length;i++){  int insertValue =array[i]; int j=i-1; //从右向左比较元素的同时,进行元素复制 for(; j>=0&&insertValue<array[j]; j--){  array[j+1]=array[j];  }   //insertValue的值插入适当位置   array[j+1]=insertValue;   }
}
public static void main(String[] args) {    int array[]={12,1,3,46,5,0,-3,12,35,16};   sort(array);    System.out.println(Arrays.toString(array));
}

如何少走弯路,利用不同区块链的数据结构实现项目上链?

数据架构是区块链的重要组成部分,了解数据架构,可以让我们对于自身业务是否适合上链做出明智的判断。

9月19日,【dfuse小聚:区块链数据应用讨论会】将在上海举行,dfuse CTO&联合创始人、EOS加拿大联合创始人 Alex Bourget;慢雾科技合伙人兼安全产品负责人启富(Keywolf);MYKET联合创始人/EOS Cannon联合创始人Ricky胖哥,与你一起深度探索区块链应用搭建以及区块链数据结构的奥秘,让你明白到底你的业务该如何上链!

长按下方二维码报名

???

福利
扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

推荐阅读:
  • HDC.2019后再发力,AppGallery Connect服务新升级
    Docker是啥?容器变革的火花?
  • 算法一看就懂之「 堆栈 」
  • 记一道字节跳动的算法面试题
    火热的云计算,你知道这些吗?
  • 假如从餐饮店的角度来看架构…

真香,朕在看了

漫画:什么是插入排序?相关推荐

  1. 漫画:什么是插入排序算法?

    面试官:聊聊插入排序 插入排序是一种比较简单直观的排序算法,适用处理数据量比较少或者部分有序的数据,今天我们来聊聊插入排序 一.排序思想 只见慧能拿出了一副牌,洗了洗牌,然后放在桌子上,从牌顶摸了几张 ...

  2. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...

    最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...

  3. 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

  4. 【算法入门漫画】:“排序算法” 大总结

    冒泡排序: 漫画:什么是冒泡排序? 选择排序: 漫画:什么是选择排序? 插入排序: 漫画:什么是插入排序? 此外还有冒泡排序的变种,鸡尾酒排序: 漫画:什么是鸡尾酒排序? 第三梯队的排序算法有什么共同 ...

  5. 数组中的元素赋值给元素_漫画:寻找无序数组的第k大元素

    本期封面作者:泰勒太乐 -----  第二天  ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第 ...

  6. c++ 二维数组 排序_漫画:“排序算法” 大总结

    ​冒泡排序: 漫画:什么是冒泡排序?​mp.weixin.qq.com 选择排序: 漫画:什么是选择排序?​mp.weixin.qq.com 插入排序: 漫画:什么是插入排序?​mp.weixin.q ...

  7. 漫画:程序员战力图鉴

    戳蓝字"CSDN云计算"关注我们哦! 看漫画了解程序员战斗力 are u ready? 编程架构能力 撕比嘴炮能力 划水摸鱼能力 花式甩锅能力 画饼忽悠能力 PPT吹比能力 哈哈哈 ...

  8. 遍历数组是什么意思_漫画:寻找无序数组的第k大元素(修订版)

    ----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...

  9. 漫画算法-小灰的算法之旅-排序算法(四)

    本文内容基于<漫画算法 小灰的算法之旅>,魏梦舒著. 1. 分类 1.1 时间复杂度为O(n^2)的排序算法 1.2 时间复杂度为O(nlogn)的排序算法 1.3 时间复杂度为线性的排序 ...

最新文章

  1. Vue.js 是什么
  2. Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
  3. java derby 用户安全_Java 7u51安全权限变化,运行derby server被拒,解决方法
  4. Ubuntu Server 上在安装Nginx时执行./confgiure后提示:C compiler cc is not found
  5. zabbix 2.2自动安装脚本
  6. mysql 重复率高字段 索引_MySQL性能优化(二)索引优化
  7. mysql函数match_Mysql全文搜索match…against的用法 | 学步园
  8. 循环队列的介绍与实现
  9. Metasploit
  10. Netpas:不一样的SD-WAN+ 保障网络通讯品质
  11. 590. N叉树的后序遍历
  12. auto CAD 常用快捷键指令
  13. ffmpeg压制视频命令及常用转码参数解析
  14. 使用原始武器的现代战争
  15. 论文阅读笔记: (2022.05, icra) Traffic Context Aware Data Augmentation for Rare Object Detection in Autonom
  16. 高中OJ3837. 【NOIP2014模拟9.14】心灵终结
  17. 日语促音和长音怎么打?
  18. 5-6中央处理器-多处理器系统硬件多线程
  19. 音视频基础知识 颜色模型
  20. JavaScript之动画特效

热门文章

  1. java resttemplate_java-通过resttemplate通过Spring Rest服务发送文...
  2. 萤火虫小程序_9.9元起!萤火虫中秋文化节来了!特价门票限量秒杀,手慢无!...
  3. 第5次基金申请终于中了!这个血泪教训一定要避免
  4. 在密码学研究方面不断创新突破—— 女密码学家的成功密码
  5. 二维码原来可以这样玩
  6. 怎么用计算机杀毒,电脑怎样查杀病毒
  7. c#计算长方形的周长和面积公式_Java面向对象练习题之计算圆的面积和周长
  8. java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted()Z 的解决
  9. 北京市(朝阳区)(西城区)(海定区)正则表达式(代码保存)
  10. hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations)