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

公司主页网站怎么做中国icp备案的有多少企业网站

公司主页网站怎么做,中国icp备案的有多少企业网站,家政公司电话,有实力自适应网站建设哪家好文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法#xff0c; 基本思想… 文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法 基本思想是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中直到所有的记录插入完为止得到一个新的有序序列 。就像大家平时打扑克牌一样. 类似于摸牌然后将其按照顺序排列。每次摸到一张牌后根据其点数从左到右插入到确切位置。 动图演示如下 细节分析 用for循环控制,从最左侧的元素开始,用它右侧的元素进行依次比较(将这个右侧的元素设置为tmp),并挪动位置,最后将其插入合适的位置 注意:看似图中是在用黑色阴影这个元素在与其前面的做交换,其实并没有,真正原理应该是把黑色阴影里面的元素拿出来(赋值给了tmp),然后与前面的进行比较,有合适的即进行覆盖,但是由于黑色阴影的值已经拿了出来(也就是tmp里面的值),所以在比较之后便可以覆盖,不会丢失这个值 代码实现 int sortArray(int* nums, int numsSize) {for(int i 0;inumsSize-1;i){int pointer i;int tmp nums[i1];while(pointer0){if(nums[pointer]tmp){nums[pointer1] nums[pointer];pointer--;}else{break;}}nums[pointer1] tmp;} }再配上一张代码细节的具体分析 复杂度分析: 时间复杂度 (1) 最好情况序列已经是升序排列在这种情况下,如果原序列本身就已经是排好了序的那么每一趟排序只需要比较一次而不需要任何移动。此时一共需要 n-1 次比较,也就是O(N) (2) 最坏情况如果原序列本身就是逆序的那么第 i1 ≤ i ≤ n-1趟排序需要比较 i 次、移动 i2 次包括将待排序元素移动到tmp变量中和从tmp变量中移动到最终位置上。此时一共需要123…(n-1) n(n-1)/2,所以O(N^2) 空间复杂度 直接插入排序只需要一个额外的tmp变量所以它的空间复杂度为O(1) 稳定性分析: 因为插入排序是只有当前元素比另外一个元素大的时候才会交换,所以相同元素的前后相对位置并不会改变,所以排序稳定 与冒泡排序的对比 若具体看冒泡排序,请看这篇文章–冒泡排序文章戳此处 下图代表前面的元素全部有序,就最后两个无序 希尔排序 算法原理 希尔排序是希尔排序由唐纳德·希尔Donald Shell发明并于1959年公布在直接插入排序算法的基础上进行改进而来的从上面的直接插入排序我们可以看出,当原序列的长度很小时即便它的所有元素都是无序的此时进行的元素比较和移动的次数还是很少。所以希尔排序正是利用这点,它首先将待排序的原序列划分成很多小的序列称为子序列。然后对这些子序列进行直接插入排序因为每个子序列中的元素变少了,所以效率也提高了. 说简单就两点:1.先进行预排序2.直接插入排序 细节分析 具体步骤如图: 原始数组,我们设定颜色相同为一组 初始分gap组,gap n / 2 5,也就是分了5组,[8,3][9,5][1,4][7,6][2,0] 五组分别进行插入排序,此时8,9,7这种大元素被排到前面,如下图,然后再缩小gap,分为2组,[3,1,0,9,7][5,6,8,4,2] 对以上两组再进行直接插入排序,结果如下,可以看出数组更加接近有序,再将gap除以2,也就是gap 1, 此时就变成了直接插入排序,此时整个数组为1组[0,2,1,4,3,5,7,6,9,8] 此时再进行微调,便达到了有序 由此可以看出,在前面gap不等于1时,前面几组调整都是预排序,而这种预排序完成之后就已经接近有序了,而上面在直接插入排序中我们也说到了,在顺序好的情况下,时间复杂度为O(N),而这里接近有序,时间复杂度也可以大概看作O(N),大大节省了时间,这也是希尔排序的主要作用和意义 代码实现 void sortArray(int* nums, int numsSize) {int gap 6;while(gap1){gapgap/31; //上图是gap gap/2;两者都行,但官方是更推荐gapgap/31for(int i 0;inumsSize-gap;i){int pointer i;int tmp nums[igap];while(pointer0){if(nums[pointer]tmp){nums[pointergap] nums[pointer];pointer - gap;}else{break;}}nums[pointergap] tmp;}} }通过上面你能发现希尔排序的代码无非就是在直接插入排序的基础之上多了一个while循环来控制gap分组 复杂度分析 时间复杂度 希尔排序的时间复杂度分析十分困难,希尔排序的平均时间复杂度和执行它所选择的gap分组有关这就要设计一些复杂的数学问题在Knuth编著的《计算机程序设计技巧》第三卷中的大量分析得出,时间复杂度大概在O(n^(1.3))即n的1.3次方。 空间复杂度 从我们以上的实现代码中可以看出希尔排序只需要几个固定的额外存储空间分别用于存储变量,这和它的待排序序列的大小无关。所以它的空间复杂度为O(1)。 稳定性分析 由于多次插入排序我们知道一次插入排序是稳定的不会改变相同元素的相对顺序但在不同的插入排序过程中相同的元素可能在各自的插入排序中移动最后其稳定性就会被打乱所以希尔排序是不稳定的。 总结对比 希尔排序和直接插入排序直接有着很强的关联性,希尔排序就是直接插入排序的加强版,利用预排序进行优化,提高排序的效率. 总的来说,直接插入排序适用于小规模或基本有序的元素具有简单易懂的实现方法和稳定的排序性质希尔排序适用于中大型规模的元素通过预处理和分组插入排序的方式提高了排序的效率。选择使用哪种算法取决于具体的需求和数据特征。
http://www.zqtcl.cn/news/787392/

相关文章:

  • 网站本地建设seo排名赚app多久了
  • 邢台手机网站建设信息超链接html代码
  • wordpress 代码模块昆明seo和网络推广
  • 匈牙利网站后缀沛县做网站xlec
  • 企业网站建设的成本国内做网站建设最好的公司是
  • 威海做企业网站云南建筑工程网
  • 旅游网站建设报价网站空间管理信息
  • app展示网站手机端app开发公司
  • 在湖南建设人力资源网站wordpress widget
  • 英文网站建站山东做网站用虚拟主机还是服务器
  • 网站设计佛山顺德投资公司注册条件和要求
  • 肇庆网站优化建设淄博网站建设优惠臻动传媒
  • 电子商务网站模板 html服装网站栏目调研
  • 抚州市做棋牌网站邯郸信息港聊天室
  • 李静做的化妆品网站树莓派lamp WordPress
  • 建站之星网站建设系统个人网站有什么外国广告做
  • 残联网站建设概况专业产品画册设计公司
  • 德尔普的网站建设的价格windows2008做网站
  • 画品展现手机网站短网址生成器有哪些
  • 如何做好网站推广营销网站 需求
  • 济宁做网站大约多少钱做设计兼职的网站有哪些
  • 教务系统网站开发方法网站建设在哪里
  • 房产网站如何做手机在网上怎么创建自己的网站
  • 金华网站建设luopan公司网站模板图片
  • 建个购物网站网站建设公司合同
  • 建设银行企业版网站网站里的动态是如何制作
  • 360网站建设的目标是什么微信哪个公司开发
  • c++可以做网站吗极验 wordpress 表单
  • 电脑做系统都是英文选哪个网站找外贸客户的联系方式软件
  • 商城网站建设咨询建工社官网