iOS(Object C) 希尔排序

希尔排序就是升级版本的 插入排序,

插入排序的文章请看我另一篇:iOS(Object C) 插入排序-CSDN博客

希尔排序的思想:

1.取一个整数d1 = N/2 (N为数组长度),将数组里的元素分成d1 个组,每组相邻元素之间的距离为d1,在各组内进行插入排序

2.取第二个整数d2=d1/2,重复步骤1的分组排序过程,直到di=1;即所有元素在同一组内直接进行插入排序.

3.完成步骤1、2,即可以得到一个有序数组.

如下图,数组为[5,3,8,7,1,4,2,6,9], 

d1 = 数组长度9/2 = 4; 所以将数组分成4组,没组的元素之间距离为4,即(5,3,8为一组,7,1为一组,4,2为一组,6,9为一组),将没组进行插入排序即可


 

插入排序的思想:

可以想象你在打牌,手里有一张牌2,

第一次摸到一张牌5; 5 比1 大,所以摸到的牌5放在1的右边; (此时手里的牌为 2->5)

第二次摸到一张牌3; 3比5小,所以3和5互换位置,再拿3和2比,3比2大,3不动(此时手里的牌为 2-> 3 -> 5)

第三次摸到一张牌1,1比5小,所以1和5互换位置;再拿1和3比,1比3小,所以1和3互换位置;再拿1和3比,1比2小,所以1和2互换位置; 

可以看到插入排序是相邻的两张牌(距离为1)比较大小,而希尔排序是距离为di的两张牌的牌比大小,明白了这个原理,就很简单了.

- (NSMutableArray *)shellSort:(NSMutableArray *)array
{
    //定义一个间隔数
    int gap = (int)array.count/2;
    
    while (gap >= 1)
    {
        for (int i = gap; i < array.count; i ++)
        {
            int temp = [array[i] intValue];
            int j = i;
            while (j >= gap && temp < [array[j-gap] intValue])
            {
                [array exchangeObjectAtIndex:j withObjectAtIndex:j-gap];
                j -= gap;
            }
        }
        
        gap = gap/2;
    }
    
    return array;
}

仔细比较插入排序和希尔排序的代码,你会发现上 把插入排序里的数字1,改为间隔距离di, 即可完成99%,最后再把di整除2即可

相关推荐

  1. python排序

    2024-04-24 20:02:05       52 阅读
  2. c++排序

    2024-04-24 20:02:05       40 阅读
  3. 排序算法——排序

    2024-04-24 20:02:05       70 阅读
  4. 排序算法】排序

    2024-04-24 20:02:05       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 20:02:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 20:02:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 20:02:05       82 阅读
  4. Python语言-面向对象

    2024-04-24 20:02:05       91 阅读

热门阅读

  1. 「笔试刷题」:杨辉三角

    2024-04-24 20:02:05       35 阅读
  2. 单片机通用程序~汇总目录

    2024-04-24 20:02:05       29 阅读
  3. 如何处理PHP中的文件上传和下载?

    2024-04-24 20:02:05       32 阅读
  4. Ubuntu20.04搭建gem5并运行helloworld

    2024-04-24 20:02:05       35 阅读
  5. SpringBoot项目 nohup启动运行日志过大问题

    2024-04-24 20:02:05       37 阅读
  6. 云主机是云服务器吗?

    2024-04-24 20:02:05       35 阅读
  7. react经验14:动态修改第三方组件的样式

    2024-04-24 20:02:05       29 阅读
  8. 深圳杯&东三省联赛数学建模挑战赛2024D题

    2024-04-24 20:02:05       42 阅读
  9. class089 贪心经典题目专题1【左程云算法】

    2024-04-24 20:02:05       38 阅读