• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift编程中实现希尔排序算法的代码实例

Swift编程中实现希尔排序算法的代码实例

作者:MoreWindows 字体:[增加 减小] 来源:互联网 时间:2017-05-28

MoreWindows 通过本文主要向大家介绍了希尔排序算法,希尔算法,希尔排序算法代码,c语言希尔排序算法,希尔加密算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

思想
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
以n=10的一个数组49, 38, 65, 97, 26, 13, 27, 49, 55, 4为例:
第一次 gap = 10 / 2 = 5

201676113213207.png (556×266)

1A,1B,2A,2B等为分组标记,数字相同的表示在同一组,大写字母表示是该组的第几个元素, 每次对同一组的数据进行直接插入排序。即分成了五组(49, 13) (38, 27) (65, 49)  (97, 55)  (26, 4)这样每组排序后就变成了(13, 49)  (27, 38)  (49, 65)  (55, 97)  (4, 26),下同。
第二次 gap = 5 / 2 = 2
排序后

201676113237199.png (538×140)

第三次 gap = 2 / 2 = 1

201676113257768.png (524×91)

第四次 gap = 1 / 2 = 0 排序完成得到数组:

201676113321065.png (516×59)

实现代码:
  

 import UIKit

   func shellsort(inout a : [Int]){

     let n = a.count-1

     for(var gap = n / 2; gap > 0; gap /= 2){
       for j in gap...n {
         if a[j] < a[j-gap]{
           let tmep = a[j]
           var k = j - gap
           while k >= 0 && a[k] > tmep {//扫一遍 好填最小值
             a[k + gap] = a[k]
             k -= gap
           }
           a[k + gap] = tmep
         }
       }
     }

   }

   var a = [2,5,6,7,8,9,0,1,3,4]

   shellsort(&a)

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift编程中实现希尔排序算法的代码实例

相关文章

  • 2017-05-28Swift 3.0基础学习之下标
  • 2017-05-28eclipse构建和发布maven项目的教程
  • 2017-05-28Swift教程之类的析构详解
  • 2017-05-28详解Swift中的数据类型类型转换
  • 2017-05-22Swift 运算符
  • 2017-05-28Swift中通过叠加UILabel实现混合进度条的方法
  • 2017-05-28Swift中用到extension的一些基本的扩展功能讲解
  • 2017-05-28完美解决gson将Integer默认转换成Double的问题
  • 2017-05-28Swift中的条件切换语句switch...case学习教程
  • 2017-05-28Mybatis中 SQL语句复用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift3.0剪切板代码拷贝及跨应用粘贴实现代码
    • 网络爬虫案例解析
    • jstl之map,list访问遍历以及el表达式map取值的实现
    • Swift中的指针操作详解
    • Swift算法实现逐字翻转字符串的方法示例
    • HttpServletRequest对象方法的用法小结
    • 史上最简单的MyBatis动态SQL入门示例代码
    • 如何设计一个秒杀系统
    • Swift 编程语言入门教程
    • Swift 析构过程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有