美文网首页
八大排序之希尔排序

八大排序之希尔排序

作者: Source_Chang | 来源:发表于2020-09-28 18:05 被阅读0次

核心思想:增量分组插入排序

C++:

void Solution::shellSort(std::vector<int>& arrNumbers) {
    
    for ( int increment = arrNumbers.size() / 2; increment > 0; increment /= 2 ) {
        
        for ( int end = increment; end < arrNumbers.size(); ++end ) {
            
            insertSort(arrNumbers, increment, end);
        }
    }
}


void Solution::insertSort(std::vector<int>& arrNumbers, int increment, int i) {
    
    // increment 表示的是分组元素之间的 间隔
    // i 表示当前分组的最后一个元素
    int j = i;
    while ( j - increment >= 0 && arrNumbers[j] < arrNumbers[j - increment] ) {
        
        // swap
        // 异或:相同为 0,不同为 1
        arrNumbers[j] = arrNumbers[j] ^ arrNumbers[j - increment];
        arrNumbers[j - increment] = arrNumbers[j] ^ arrNumbers[j - increment];
        arrNumbers[j] = arrNumbers[j] ^ arrNumbers[j - increment];
        
        j -= increment;
    }
}

Objective-C:

+ (nullable NSArray<NSNumber *> *)shellSort:(nonnull NSArray<NSNumber *> *)arrNumbers {
    
    NSMutableArray<NSNumber *> *arrMNumbers = [arrNumbers mutableCopy];
    for ( NSInteger increament = arrMNumbers.count / 2; increament > 0; increament /= 2 ) {
        
        for ( NSInteger i = increament; i < arrMNumbers.count; ++i ) {
            
            for ( NSInteger j = i; j - increament >= 0; j -= increament  ) {
                
                if ( arrMNumbers[j].integerValue < arrMNumbers[j - increament].integerValue ) {
                     
                    NSNumber *tempNumber = arrMNumbers[j - increament];
                    arrMNumbers[j - increament] = arrMNumbers[j];
                    arrMNumbers[j] = tempNumber;
                }
            }
        }
    }
    
    return [arrMNumbers copy];
}

DEMO

相关文章

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

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

  • 算法❤ 八大排序算法

    八大排序法【内部排序】:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序 【插入排序】...

  • 八大排序算法

    八大排序:一、直接插入排序 二、希尔排序 三、简单选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 ...

  • 排序算法之插入排序和希尔排序(shell sort)

    插入排序(inserction sort)和希尔排序(shell sort) 相关文章 排序算法之快速排序

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

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

  • swift经典算法-希尔排序

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

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

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

  • 希尔排序学习

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

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

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

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

网友评论

      本文标题:八大排序之希尔排序

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