这篇文章主要讲解了“C语言直接插入排序与希尔排序如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言直接插入排序与希尔排序如何使用”吧!排序是我们生活中经常会面对的问题,以打扑克牌为例,你摸的手牌肯定是杂乱的,你一定会将小牌移动到大牌的左面,大牌移动到小牌的右面,这样顺序就算理好了。这里我们的理牌方法就是直接插入排序。核心思想: 就是将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数增1的有序表。算法分析:从序列第一个元素开始,该元素可以认为已经被排序取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将该元素移到下一位置。重复步骤2,直到找到已排序的元素小于或者等于待排序元素的位置,插入元素。重复2,3步骤,完成排序。以12,2,9,8,18,7这几个数字为例,排序过程:这里三角形表示要插入的值横线表示已经排好序的数字j是趟数,是这一趟开始的时候已排序队列的最后一个值的下标。代码如下:时间复杂度:(1)顺序排序时,只需比较(n-1)次,插入排序时间复杂度为O(n);(2)逆序排序时,需比较n(n-1)/2次,插入排序时间复杂度为O(n^2);(3)当原始序列杂乱无序时,平均时间复杂度为O(n^2)。空间复杂度:插入排序过程中,需要一个临时变量temp存储待排序元素,因此空间复杂度为O(1)。算法稳定性:插入排序是一种稳定的排序算法。希尔排序其实就是对直接插入排序的优化,在第一部分我们说过==(1)直接插入排序数据越有序,插入的效率就越高;(2)记录数比较少时,直接插入的优势也很明显。==希尔排序就是根据这两个特点进行的优化。核心思想: 通过一个不断缩小的增量序列,对无序序列反复的进行拆分并且对拆分后的序列使用插入排序的。算法分析:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的);分别进行直接插入排序,然后依次缩减增量再进行排序;待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序;完成排序。以12,2,9,8,5,88,99,10,7,17,77,66,89,10,21为例,排序过程如下:这里相同颜色的线相同的分组每次增量取上一次的一半(向下取整)注意:最后一个增量值必须等于1才可以代码如下:时间复杂度:希尔排序的时间复杂度依赖于增量序列的函数,当n在某个特定的范围后最优的情况下,希尔排序的时间复杂度为O(n ^ 1.3),在最差的情况下,希尔排序的时间复杂度为:O(n ^ 2)。空间复杂度:希尔排序的空间复杂度:O(1)。算法稳定性:希尔排序并不是一种稳定的排序算法。感谢各位的阅读,以上就是“C语言直接插入排序与希尔排序如何使用”的内容了,经过本文的学习免费云主机域名后,相信大家对C语言直接插入排序与希尔排序如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!
这篇文章主要介绍“iOS如何实现手动和自动屏幕旋转”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“iOS如何实现手动和自动屏幕旋转”文章能帮助大家解决问题。首先iPhone中屏幕分为状态栏方向和设备方向系统提供两个地方来…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。