美文网首页数据结构
内排序4:谢尔排序

内排序4:谢尔排序

作者: 玲儿珑 | 来源:发表于2020-05-04 02:47 被阅读0次

谢尔排序又称缩小增量排序,是对直接插入排序的一种改进。
核心思想:首先确定一个时间间隔数gap,然后将参加排序的序列按此间隔数从第1个元素开始依次分为若干个子序列,即分别将所有位置相隔为gap的元素视为一个子序列,在各个子序列中采用某种排序方法进行排序(这里不妨使用泡排序法);然后缩小间隔数,并重新将整个序列按新的间隔数分成若干个子序列,再分别对各个子序列进行排序,如此下去,直到间隔数gap=1。
算法如下:

function shellSort(arr) {
    let n = arr.length
    let i, j, temp, flag, gap = n
    while ( gap>1 ) {
        gap = Math.floor(gap/2)
        do {
            flag = 0
            for( i=0; i<n-gap; i++) {
                j = i+gap
                if ( arr[i] > arr[j] ) {
                    temp = arr[j]
                    arr[j] = arr[i]
                    arr[i] = temp
                    flag = 1
                }
            }
        } while ( flag!=0 );
    }
    return arr
}

let arr = [5,3,8,1,9,2,7,4,6,10]
shellSort(arr)

性能:
谢尔排序的速度是一系列间隔数gapi的函数,因而对其进行算法分析不是一件容易的事情,尤其是如何选择最合适的间隔数序列才能产生最好的排序效果,至今也没有得到较好的解决。
时间复杂度:稍大于O(nlog2n)接近于O(n1.23)。是不稳定排序法。

相关文章

  • 内排序4:谢尔排序

    谢尔排序又称缩小增量排序,是对直接插入排序的一种改进。核心思想:首先确定一个时间间隔数gap,然后将参加排序的序列...

  • 十大排序算法

    十大排序算法 1.插入排序 2.折半插入排序算法 3.选择排序 4.冒泡排序 5.谢尔排序 6.快速排序 7.堆积...

  • 排序算法Java实现

    快速排序 冒泡排序 堆排序 选择排序 归并排序(待续...) 如发现错误,还望不吝指正为谢~

  • 【数据结构】七大排序算法 - 冒泡、简单选择、直接插入、希尔、堆

    排序的相关概念 排序的分类 根据在排序过程中带排序的记录是否全部被放置在内存中,排序分为:内排序外排序 1.内排序...

  • 排序算法归类和实现

    1.排序算法的分类 内排序和外排序概念内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对...

  • iOS算法总结-回顾

    根据将排序记录是否全部放置在内存中,将排序分为内排序和外排序,之前讲的都是内排序,这里总结一下,内排序分为四类:插...

  • 数据结构与算法 02:总概

    根据将排序记录是否全部放置在内存中,将排序分为内排序和外排序,之前讲的都是内排序,这里总结一下,内排序分为四类:插...

  • 排序算法

    1、概念 2、内排序与外排序 内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。外排序是由于排序的记录...

  • 排序算法整理

    排序算法总览 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过...

  • 常用的排序

    排序分为内排序和外排序,区别在于: 内排序:在内存中进行的排序外排序:当参与排序的数据量特别大,一次不能全部读入内...

网友评论

    本文标题:内排序4:谢尔排序

    本文链接:https://www.haomeiwen.com/subject/wjwsghtx.html