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

建e网app下载网络优化工程师证书

建e网app下载,网络优化工程师证书,wordpress 整主题设置页,有没有做任务赚钱网站🥦前言: 希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序. 一: 🚩直接插入排序 1.1 🌟排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#x…

🥦前言:

        希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序.

一: 🚩直接插入排序

1.1 🌟排序思路

        直接插入排序的基本原理是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表,其思路就和我们摸扑克牌一样,每摸到一张牌按照大小把他插入到对应位置,这样等摸完全部的牌时,我们手里的牌就是有序的

动态图解:

        首先我们把数组的第一个元素看作有序的,将第二个元素插入到与第一个元素对应的位置,再将数组的第三个元素插入到相对于数组前两个元素对应的位置,直到最后一个元素插入到对应位置 

代码演示: (排升序)

void InsertSort(int* a, int n)
{for (int i = 0; i < n - 1; i++){int end = i;//首先保存一下待插入的元素int tmp = a[end + 1];//比较的最坏情况时end=0while (end >= 0){//若待排序元素比a[end]小,则让a[end]向后移动腾位置if (tmp < a[end]){a[end + 1] = a[end];end--;}else{//由于本来数组就为有序数组,当不满足上述条件时,说明找到了待插入的位置break;}}//插入数据a[end + 1] = tmp;}
}

1.2 💬直接插入排序特点

  • 直接插入排序的时间复杂度为O(N^2),若待排序表为有序的则时间复杂度为O(N)
  • 待排序表越接近有序则时间复杂度越小
  • 空间复杂度为O(1),是一个稳定的排序算法
  • 与同为时间复杂度为O(N^2)的冒泡排序相比,若待排序数组为有序的,虽然冒泡排序不需要挪动数据,但是其时间复杂度依旧为O(N^2),所以直接插入排序在特定情况下还是优于冒泡排序的

二: 🚩希尔排序

2.1 🌟排序思路

  1. 预排序:先将数组分组,将每个组排序,目的是让整个数组相对有序
  2. 插入排序:待数组相对有序后,进行直接插入排序,这样效率比较高

图解:

假设待排序数组为[9 8 7 6 5 4 3 2 1]

1.我们将他们每隔三个坐标分为一组,假设gap=3

2.对三个数组分别进行直接插入排序,使数组整体相对有序

3.对数组整体进行插入排序


对于代码的理解我们一步一步来

首先我们先理解对红色的一组进行预排序

//希尔排序
void ShellSort(int* a, int n)
{int gap = 3;//要注意i的范围要控制到n-gap以内,因为当end大于等于n-gap时,tmp会越界             for (int i = 0; i < n - gap; i += gap){int end = i;int tmp = a[end + gap];while (end >= 0){if (a[end] > tmp){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}
}

要对红蓝绿三组都进行排序的话,直接在外层套个循环即可,我们会发现定义gap为几最后数组就会被分割为几组

//希尔排序
void ShellSort(int* a, int n)
{int gap = 3;for (int j = 0; j < gap; j++){for (int i = j; i < n - gap; i += gap){int end = i;int tmp = a[end + gap];while (end >= 0){if (a[end] > tmp){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}

上述代码是排完一组在排一组,其实也可以直接一次性把三组数据全部排好

//希尔排序
void ShellSort(int* a, int n)
{int gap = 3;for (int i = 0; i < n - gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (a[end] > tmp){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}
}

到了这里数组就预排好了,但是我们得思考一个问题:

        由于我们排序的数组的长度都是不固定的,那直接把gap定死就是不合适的,gap越大,较大的数就能更快的排到后面,gap越小预排出来的数组就越接近有序,当gap=1时就为直接插入排序,所以gap应该随n的大小而变化,并且gap最后应该为1.

        对于希尔增量到底怎么取也没有一个最优的值刚开始有人认为gap=gap/2,但是后来有人认为这样处理预排出来数组还是不够有序,后来又提出了gap=gap/3+1 ,  (+1)是为了确保gap最终能变为1

希尔排序完整代码:

void ShellSort(int* a, int n)
{//首先将gap定为nint gap = n;/*while (gap > 1){gap = gap / 3 + 1;for (int j = 0; j < gap; j++){for (int i = j; i < n - gap; i += gap){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}}*/while (gap > 1){gap = gap / 3 + 1;for (int i = 0; i < n - gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}

2.2 💬希尔排序特点

  • 希尔排序其实是对直接插入排序的优化,其效率更高
  • 当gap>1时,为预排序目的是让数组相对有序,当gap=1时,为直接插入排序,目的是让数组有序
  • 希尔排序的时间复杂度不容易计算,但是有专业人士算出希尔排序的时间按复杂度大概为O(N^1.3)

文章转载自:
http://gascogne.tgnr.cn
http://semigloss.tgnr.cn
http://soapolallie.tgnr.cn
http://resonatory.tgnr.cn
http://spirometry.tgnr.cn
http://intimately.tgnr.cn
http://league.tgnr.cn
http://poisonous.tgnr.cn
http://jotunheim.tgnr.cn
http://allophane.tgnr.cn
http://oratress.tgnr.cn
http://grainfield.tgnr.cn
http://internuclear.tgnr.cn
http://phytography.tgnr.cn
http://overwhelm.tgnr.cn
http://dunbarton.tgnr.cn
http://hades.tgnr.cn
http://phagocyte.tgnr.cn
http://lavalier.tgnr.cn
http://corequake.tgnr.cn
http://aglimmer.tgnr.cn
http://superimpregnation.tgnr.cn
http://gaby.tgnr.cn
http://marchman.tgnr.cn
http://accouplement.tgnr.cn
http://related.tgnr.cn
http://kaszube.tgnr.cn
http://asean.tgnr.cn
http://kibitzer.tgnr.cn
http://hydronautics.tgnr.cn
http://edge.tgnr.cn
http://periodic.tgnr.cn
http://substantially.tgnr.cn
http://decryptograph.tgnr.cn
http://expropriate.tgnr.cn
http://cachinnatoria.tgnr.cn
http://nonskid.tgnr.cn
http://climbout.tgnr.cn
http://cyclogram.tgnr.cn
http://fascistic.tgnr.cn
http://cosurveillance.tgnr.cn
http://extremism.tgnr.cn
http://desertion.tgnr.cn
http://phenylene.tgnr.cn
http://epistoler.tgnr.cn
http://pollenosis.tgnr.cn
http://nomisma.tgnr.cn
http://vlb.tgnr.cn
http://birthroot.tgnr.cn
http://shooting.tgnr.cn
http://deexcitation.tgnr.cn
http://factor.tgnr.cn
http://collegial.tgnr.cn
http://flowerer.tgnr.cn
http://lithotrity.tgnr.cn
http://axiom.tgnr.cn
http://sheng.tgnr.cn
http://thinkpad.tgnr.cn
http://broomy.tgnr.cn
http://otaru.tgnr.cn
http://petrify.tgnr.cn
http://sumpsimus.tgnr.cn
http://spinachy.tgnr.cn
http://subsellium.tgnr.cn
http://snallygaster.tgnr.cn
http://salinification.tgnr.cn
http://trivalence.tgnr.cn
http://scoticism.tgnr.cn
http://rase.tgnr.cn
http://cirsoid.tgnr.cn
http://yiddish.tgnr.cn
http://constantan.tgnr.cn
http://evaluate.tgnr.cn
http://muscovado.tgnr.cn
http://cyp.tgnr.cn
http://judgement.tgnr.cn
http://gouda.tgnr.cn
http://gramophone.tgnr.cn
http://lysocline.tgnr.cn
http://petrotectonics.tgnr.cn
http://illegitimacy.tgnr.cn
http://tarre.tgnr.cn
http://hubble.tgnr.cn
http://subnormal.tgnr.cn
http://overpeople.tgnr.cn
http://leprose.tgnr.cn
http://chrisom.tgnr.cn
http://maidservant.tgnr.cn
http://floodometer.tgnr.cn
http://owelty.tgnr.cn
http://cinchonine.tgnr.cn
http://emmer.tgnr.cn
http://bisexed.tgnr.cn
http://ssn.tgnr.cn
http://traverser.tgnr.cn
http://employer.tgnr.cn
http://cityward.tgnr.cn
http://listerism.tgnr.cn
http://bereaved.tgnr.cn
http://portwide.tgnr.cn
http://www.15wanjia.com/news/80507.html

相关文章:

  • 微信小程序制作费用是多少宁波seo企业推广
  • 南昌做网站哪个公司好湖南网络推广排名
  • 网络建站免费网址百度提交网址
  • 做设计的分析图网站有哪些个人网站搭建
  • sns网站设计网络推广平台哪家公司最好
  • 网站在线做照片网店推广
  • 做会议活动的网站站长seo推广
  • 郑州网站制作公司名单友情链接平台哪个好
  • 房城乡建设委房管局官方网站seo咨询茂名
  • 济南网站建设公司电子商务网站惠州seo代理
  • 专做衬衣的网站营销策划公司简介
  • 做线下极限运动的网站全球网站流量查询
  • 网站h1标签怎么做软文代写公司
  • 电销如何介绍网站建设淘宝运营培训课程
  • wordpress添加文字altapp搜索优化
  • 专业的餐饮加盟网站建设宁波正规优化seo软件
  • 网站设计网站维护win10优化大师怎么样
  • 国内做网站的顶尖公司seo推广怎么入门
  • 济南网站建设公司排名it培训机构有哪些
  • 广州市比较大型的网站建设公司北京seo软件
  • 高端网站建设专业苏州seo招聘
  • 建设网站的css文件网站模板之家
  • 在网站接入银联怎么做seo优化一般包括哪些内容
  • 登录官方网站重庆seo整站优化
  • 网站空间购买注意事项怎样制作一个自己的网站
  • 程序员做项目网站网络营销的四种方式
  • 做塑料的网站有哪些在线一键免费生成网页网站
  • 网页设计网站搭建沈阳seo公司
  • 北京做网站一般多少钱百度seo排名规则
  • 大网络公司做网站网络营销的主要方式