美文网首页
05数据结构排序算法之希尔排序

05数据结构排序算法之希尔排序

作者: 7分醉 | 来源:发表于2018-05-26 00:05 被阅读13次

希尔排序(shell sort)基本思想是把数据按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的数据越来越多,当增量减至1时,整个数组恰被分成一组,算法便终止。

代码实现:

/**
 *  希尔排序
 *
 *  @param dataArray 要排序的数据源
 *
 *  @return 已排序的数据
 */
+ (NSArray *)shellSort:(NSArray *)dataArray {
    NSMutableArray *resultArray = [NSMutableArray arrayWithArray:dataArray];
    NSInteger increment = resultArray.count;
    NSInteger j;
    do {
        //计算增量 据说这样算出来的增量计算的效率最高
        increment = increment / 2;
        //开始循环
        for (NSInteger i = increment; i < resultArray.count; i ++) {
            //比较增量两端的值,如果不符合顺序要求则进入循环进行排序
            if (resultArray[i] < resultArray[i - increment]) {
                
                //进入这里最少会执行一次循环,执行后在该增量分组内循环判断,确保组内是按照顺序排序
                for (j = i; j - increment >= 0 && resultArray[j] < resultArray[j - increment]; j -= increment) {
                    [resultArray exchangeObjectAtIndex:j withObjectAtIndex:j - increment];
                }
            }
        }
        
    } while (increment > 1);
    return resultArray;
}

简要分析:


希尔排序

刚开始数据分为5组(8,3),(9,5),(1,4),(7,6),(2,0)
分别组内比较,如果不满足从小到大顺序则交换数据位置。
第一轮结束,数组顺序为 3,5,1,6,0,8,9,4,7,2

第二轮增量为2,先比较3和1,满足条件,交换3和1位置,
交换后数组顺序为1,5,3,6,0,8,9,4,7,2
然后比较3和0,满足条件,交换3和0位置
交换后数组顺序为1,5,0,6,3,8,9,4,7,2
然后比较1和0,满足条件,交换1和0位置
交换后数组顺序为0,5,1,6,3,8,9,4,7,2

再然后比较3和9,不满足条件
然后比较9和7,满足条件,交换9和7位置
交换后数组顺序为0,5,1,6,3,8,7,4,9,2
然后比较3和7,不满足条件
到此,第二轮结束

接着缩小增量,进行下一轮

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

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

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

  • Python 算法大全

    这个库涵盖了多种算法和数据结构的介绍,比如: 排序算法(冒泡排序、希尔排序、插入排序、桶排序、合并排序、快速排序、...

  • C语言:关于数据的几种排序算法

    数据结构的排序算法有很多种。其中,快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法;基数排序、冒泡排序、...

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

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

  • 算法与数据结构路线图

    学习算法与数据结构,深刻理解计算机科学 排序算法:插入、冒泡、选择、希尔、快速、归并、堆排序、计数排序、桶排序、基...

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

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

  • swift经典算法-希尔排序

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

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

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

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

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

网友评论

      本文标题:05数据结构排序算法之希尔排序

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