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

怀宁县住房和建设局网站用php做的网站有

怀宁县住房和建设局网站,用php做的网站有,刷QQ砖的网站咋做,家装设计师培训课程文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法#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.sadfv.cn/news/349902/

相关文章:

  • 个人怎么做ipv6的网站成都网站网页设计
  • 与狗狗做网站wordpress 最新评论
  • 邯郸建公司网站价格网页设计 参考网站
  • 常州市建设工程质监站网站各国网站建设排名
  • 公司网站界面如何设计做好网站维护管理
  • python做网站性能注册安全工程师官网
  • 做网站咋赚钱招投标网站开发公司
  • 怎样做国际网站平台网站维护服务器
  • 企业模板网站建设优势分析wordpress如何拖移小工具
  • 南阳手机网站制作手机自己做网站
  • 保护稀有动物网站建设策划书国外网站排行
  • 合肥网站制作网站如何做企业网站后台管理
  • 网站优化快照云岭建设集团的网站
  • 百度免费网站制作免费做自荐书的网站
  • 软件项目管理考试题及答案seo检查工具
  • 怎么在网站上做音乐php钓鱼网站怎么做视频教程
  • 网站描述设置十大免费ppt网站下载app
  • 湖北响应式网站建设费用丹阳网站制作
  • wordpress自定义评论头像公众号seo排名
  • 免费域名注册免备案网站关键词的优化在哪做
  • 哪些因素营销网站权重凡科建站代理平台
  • 如何把网站做跳转浏览器链接地址正规网页设计培训怎么样
  • 公司建设网站需要什么更新公司网站内容需要
  • 移动公司营销网站设计公司做网站比较好的
  • 在线设计logo商标免费无水印湖南专业竞价优化服务
  • 泸州网站建设无锡阿凡达
  • 网站建设网络欧美教育网站模板
  • 推广型网站建设电话佛山网站建设外包公司
  • pc网站建设意见班级优化大师使用心得
  • 网站优化招聘学习前端开发的网站