排序算法希尔排序

希尔排序(Shell Sort)
升级版的插入排序,先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1), 即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。

时间复杂度:

1)最好情况o(n)

2)最坏情况o(n^3/2)

性能高于插入排序 但不稳定。
算法稳定性:通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。

Paste_Image.png
static void shellSort(int[] array) {  
        if (array != null && array.length > 0) {  
            int i, j, gap, key;  
            int n = array.length;  
            for (gap = n / 2; gap > 0; gap /= 2) //步长  
            {  
                for (i = 0; i < gap; i++)        //直接插入排序  
                {  
                    for (j = i + gap; j < n; j += gap) {  
                        if (array[j] < array[j - gap]) {  
                            key = array[j];  
                            int k = j - gap;  
                            while (k >= 0 && array[k] > key) {  
                                array[k + gap] = array[k];  
                                k -= gap;  
                            }  
                            array[k + gap] = key;  
                        }  
                    }  
                }  
            }  
        }  
    }```

/**

  • 将数组的2个位置交换
    */
    static void swap(int[] array, int i, int j) {
    if (array != null && array.length > 0) {
    if (i >= 0 && j >= 0 && i <= array.length && j <= array.length) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
    }
    }
    }```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,227评论 0 1
  • 前面一口气写了冒泡、选择、插入三个排序算法,感觉今天和他们死磕上了。。。就不该十一点多还看了几眼。。。然后又掉坑里...
    noonbiteun阅读 5,141评论 0 8
  • 希尔排序 希尔排序的由来是根据插入排序的。读者若不了解插入排序,可以参考笔者的详解排序算法--插入排序和冒泡排序....
    六尺帐篷阅读 5,022评论 0 11
  • 一、希尔排序思想 希尔排序是基于插入排序的快速的排序算法,先分组后对每组进行直接插入排序,再分组再直接执行插入排序...
    WX_WDN阅读 2,738评论 0 0
  • 这是我以前写的博客,我迁移过来的,时间写的有点久远 1.冒泡排序和选择排序 为什么把冒泡排序和选择排序放在一块儿呢...
    ianCure阅读 6,749评论 3 19