当前位置: 首页 > wzjs >正文

河南富士康疫情最新消息seo网站编辑优化招聘

河南富士康疫情最新消息,seo网站编辑优化招聘,海洋cms做电影网站好做吗,遵义信息港用一个生动的例子来比喻直接插入排序:打扑克时理牌的行为 在理牌的时候,我们会根据牌面的大小将其插入合适的位置,那么直接插入排序也是如此 直接插入排序: 直接插入排序可以看作是将待排序的内容分为两个部分,一部分…

用一个生动的例子来比喻直接插入排序:打扑克时理牌的行为

在理牌的时候,我们会根据牌面的大小将其插入合适的位置,那么直接插入排序也是如此

直接插入排序:

直接插入排序可以看作是待排序的内容分为两个部分,一部分为有序一部分为无序整个排序过程就是每次都从无序的部分里取出第一个元素,和有序部分的尾部元素开始往前进行比较,直到找到合适的位置进行插入就停止

过程模拟:

假设现在有一个序列如:2 5 3 0 6 4 需要对其使用直接插入排序进行升序排序

那么第一趟排序,第一个元素[ 2 ]就是有序部分,剩下的元素就为无序部分

①取出无序部分的第一个元素5,和有序部分的元素 [ 2 ] 进行比较,选择合适的位置插入

②因为5>2,所以 5 就放在 2 的后面,不进行移动改变,此时前两个数是有序的[ 2,5 ]

此时第二趟排序,有序部分为[ 2,5 ],剩下的元素就为无序部分

因为有序部分不止一个元素,使用end来指向有序部分中的元素,来控制两个部分之间的元素比较

使用end指向有序部分中待比较的位置,使用变量tmp保存待插入元素的值,因为比较过程中可能会挪动覆盖掉待插入的值,所以提前保存

①取出无序部分的第一个元素 即待插入的元素,用tmp变量保存起来,再和有序部分的元素 [ 2,5 ] 进行比较,使用end来指向每次待比较的元素,选择合适的位置插入

②使用 tmp 的值end 指向位置(有序部分中最后一个位置)的值即 5 进行比较,因为3<5,所以 end 位置的值即 5 移动到end+1的位置即 3 的位置或者说5的下一个位置,3就被覆盖

③此时比较完有序部分中的一个元素,end就进行减减--,指向有序部分中下一个待比较的元素此时该元素为 2 ,因为tmp的值即 3>2 ,所以此时tmp就插入到end的下一个位置即end+1的位置

只要将tmp插入到合适的位置,那么该躺排序就结束

进入第三趟排序,有序部分为[ 2,3,5 ],剩下的元素就为无序部分

此时待插入的元素为 0 ,tmp=0,end就指向有序部分末尾的位置,即5所在位置

① 使用tmp的值 0 与 end 指向的位置进行比较,0<5,end位置的值往后挪动即挪到到end+1的位置,即5覆盖掉0

② end进行减减--,指向有序部分的下一个待比较元素即3,因为tmp为0,0<3,所以3挪动到end+1的位置

③ end继续减减--,指向有序部分的下一个待比较元素即2,因为tmp为0,0<2,所以2挪动到end+1的位置

 ③ end再继续减减--,但是此时有序部分已经全部都比较完毕了,end--后等于-1,此时tmp的值就直接插入到end+1的位置即序列的第一个位置

那么剩下的无序部分依此类推,每次都取出无序部分的第一个元素与有序部分进行比较,直到找到合适的位置进行插入就结束

代码逻辑抽象:

先来单趟的逻辑一个元素进行插入的过程

无论是通过找到比 tmp 小的元素而找到插入的位置结束即break,还是通过将有序部分的元素都比较完,而找到插入的位置结束即end<0,会发现最终插入的位置都是end+1的位置即end指向的位置的下一个

// 数组 int a[]={2,5,3,0,6,4}
int end;
int tmp=a[end+1];
while(end>=0) // 当有序部分都比较完了就结束
{if( tmp < a[end] ){a[end+1]=a[end]; // 元素向后挪动end--;}else{break; // tmp大于比较的元素,即找到合适的位置,结束比较}
}
// 循环结束即找到合适的位置,即为end+1,将tmp插入
a[end+1]=tmp;

完整代码:

// 数组 int a[]={2,5,3,0,6,4}
void InsertSort(int* a,int n)
{// 外层循环,控制有序部分范围,即end指向的位置for(int i=0;i<n-1;i++){int end=i;int tmp=a[end+1];while(end>=0) // 当有序部分都比较完了就结束{if( tmp < a[end] ){a[end+1]=a[end]; // 元素向后挪动end--;}else{break; // tmp大于比较的元素,即找到合适的位置,结束比较}}// 循环结束即找到合适的位置,即为end+1,将tmp插入a[end+1]=tmp;}
}

时间复杂度分析:

从代码来看最坏时间复杂度是O(N^2)如待排序的序列为逆序

最好时间复杂度是O(N)即顺序有序或接近有序,那就相当于遍历了一遍

http://www.dtcms.com/wzjs/138403.html

相关文章:

  • 网站只收录无权重网址大全2345
  • 网站二维码收费怎么做企业建设网站公司
  • 什么是顺联网络营销网站搜索引擎优化方案的案例
  • 如何快速搭建个人网站百度店铺怎么开通
  • 展会网站建设 服务器选择很重要整站优化网站
  • 怎样用网站做淘宝客微信crm系统
  • 技术支持 武汉网站建设常用搜索引擎有哪些
  • 常熟市政府网站集约化建设方案网页模板设计
  • 做不锈钢门的网站代运营公司前十名
  • 房产网站建设推广网销怎么做
  • 做网站视频存储站长工具是做什么的
  • 用易语言做钓鱼网站搜索引擎快速优化排名
  • wordpress 与公众平台seo知识点
  • 免费微网站开发平台做网络推广好吗
  • 一般网站建设步骤seo测试
  • 珠宝企业的门户网站开发推广网站的文案
  • 搬瓦工的主机做网站谷歌推广怎么开户
  • 网站怎么做图片滚动条电脑系统优化软件十大排名
  • 网站建设建网站做网站网站设计全球搜索
  • 哪里有零基础网站建设教学服务福州短视频seo机会
  • 淘宝上做网站可信吗企业网络营销方案策划
  • 网站设计有限公司是干嘛的推广网站多少钱
  • vue 做企业网站鞍山seo公司
  • 单页面网站如何优化引流免费收录软文网站
  • 现在淘客做网站还行吗百度网页入口官网
  • 建设银行网站功能介绍直通车优化推广
  • 自己做物流网站合肥seo培训
  • 网页版梦幻西游周年庆攻略网络搜索优化
  • 溧阳做网站优化推广网站seo
  • 用eclipse做网站开发小红书seo是什么意思