今天又重新研究了一遍诸多排序算法,现在简单分享一下里面的希尔排序(Shell Sort)的心得。
希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
使用该算法,应首先为待排序元素序列选择一个不大于元素个数的增量,或者也称步长(step)。其本质是给元素序列分组。
现在我们有如下一组数据:
96,107, 145, 137, 106, 142, 146, 134, 32, 86
一般我们会选择元素个数的一半作为步长(这里元素个数为10,所以步长取5)。其本质是给这个序列分为5(5就是元素的下标之差)组:
(96–142,107–146,145–134,137–32,106–86,所以这几组元素都是对应关系。)。并让步长在循环中每次变为上次的一半。
其次,应该从下标等于步长处开始遍历直至到达末尾。并使用一个临时变量(temp)保存每次遍历到的值,为以后的插入排序做准备.
然后,就是遍历数组啦,按照一定规则(升序还是降序,根据需要,这里以升序为例),用上面的临时变量temp来和对应位置元素比较
特点:
1.在进行大量数据排序上,效率较高,因为相比于冒泡,选择排序,其每次操作省略了三步赋值的开销,只有一步。
2.希尔排序是一种不稳定的排序。当一个序列处于基本有序状态时,其效率高。基本有序是指,按照其分组来看,其较大和较小
元素分别处于两边。
希望能对大家有所帮助,有哪里不对或者不同见解的也希望积极与我联系,一起沟通,共同进步。