美文网首页
希尔排序

希尔排序

作者: 无题007 | 来源:发表于2017-12-14 16:59 被阅读7次

希尔排序是插入排序的一种,也称为缩小增量排序。是直接插入排序的一种更高效的改进版本。基本思想如下:
先将整个待排序列分成若干个子序列,分别进行直接插入排序,等到整个序列中的记录“基本有序”了,再对全体记录进行一次直接插入排序。

算法实现:
我们这里简单处理增量序列: 增量序列d={n/2,n/4,n/8.....1} n为序列元素个数。
即:先将要排序的一组记录,按照某个增量d分成若干组 子序列,每组中记录的下标 相差d。对每组中的全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,再每组进行直接插入排序。连续不断缩小增量直至为1,最后使用直接插入排序完成排序。
代码如下:

- (void) shellSort{
    long d = _array.count / 2;
    while (d >= 1) {
        [self shellInsertSort:_array and:d];
        d = d / 2;
    }
}

- (void)shellInsertSort:(NSMutableArray *)array and:(long)d{
    for(NSInteger i = d ; i < array.count; i++){
        if(array[i] < array[i-d]){
            NSInteger j = i-d;
            NSInteger tmp = [array[i] intValue];
            [array replaceObjectAtIndex:i withObject:array[i-d]];
            
            while (j > -1&&tmp < [array[j] intValue]) {
                [array replaceObjectAtIndex:j+d withObject:array[j]];
                j = j - d;
            }
            [array replaceObjectAtIndex:j+d withObject:@(tmp)];
        }
    }
}

相关文章

  • 排序算法(二)之希尔排序

    图解排序算法(二)之希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也...

  • 07-希尔排序(Shell Sort)

    希尔排序(Shell Sort) 希尔排序是唐纳德·希尔(Donald Shell)在0959年提出的。希尔排序与...

  • 排序-希尔排序(分治)

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • swift经典算法-希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 排序算法④——希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 排序算法-希尔排序(Java实现)

    希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是...

  • 说说算法那些事-希尔排序

    希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,希尔排序法又称...

  • 希尔排序学习

    希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • 编程马拉松 Day04 希尔排序、归并排序、快速排序

    本文将介绍三个高级排序算法 希尔排序 归并排序 快速排序 希尔排序 希尔排序(Shell's Sort)的名称源于...

网友评论

      本文标题:希尔排序

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