美文网首页iOS进阶Swiftswift学习
常用排序算法学习(swift版)

常用排序算法学习(swift版)

作者: 槛内浊物 | 来源:发表于2016-11-16 16:46 被阅读12067次

前言

之前写过一篇Swift排序之sort函数,里面仅仅写了sort函数怎么使用。今天用一些常用的算法,试着实现一下swift中的sort函数,顺便也学习一下常用的排序算法。
最近在网上也看了一些swift的排序算法,但是感觉写的都不太好,都是类似于这种

func sort(a:[Int]) {
    .......
}

这种其实也不是不行,但是有点不太符合swift的风格,我们看swift中的sort是没有把数组传过去的,他只是Array的一个扩展。应该是这么用的

let a = ["2","1","3"]
a.sort(<)

下面我们抛开正序还是倒叙,默认为正序排,来探讨下swift中基于Array的扩展的冒泡排序,选择排序和快速排序

1. 冒泡排序

冒泡排序再基础不过了,这里就不再讲其原理了,实在不会可以看下百度百科冒泡排序
既然冒泡排序避免不了数组中两个数据交换,先写一个交换函数

// 交换数组中i和j两个位置的数据
extension Array {

    fileprivate mutating func swap(i:Int,j:Int) {

        (self[i],self[j]) = (self[j],self[i])
    
    }
}

下面就是排序了也很简单就不多解释了

 // MARK: - 冒泡排序
/**
 * 通过与相邻元素的比较和交换,把小的数交换到最前面。
 */
extension Array where Element:Comparable {

    mutating func bubbleSort() {

        for i in 0..<self.count-1 {

            for j in (i+1...self.count-1).reversed() {
                // 后者小于前者,交换位置,即小的往上升大的往下沉
                if self[j] < self[j-1] {
                    swap(i: j, j: j-1)
                }

            }

        }  

    }

}

因为是排序,所以元素必须满足协议是可比较的。
下面快速排序和选择排序也是同样的道理。

2. 快速排序

快速排序的思想

源代码这里先截下图,想看的话可以去我github上下载源代码

快速排序 接上图

选择排序这里就不说了,大家可以自己尝试写一下,有兴趣可以去我github下载源代码

相关文章

  • 常用排序算法学习(swift版)

    前言 之前写过一篇Swift排序之sort函数,里面仅仅写了sort函数怎么使用。今天用一些常用的算法,试着实现一...

  • 冒泡与选择排序

    优化版冒泡排序 选择排序 数据交换常用三种算法对比

  • Swift--算法排序

    本文主要记录Swift中常用到的七种算法: 一、冒泡排序

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • 常用排序算法总结

    常用排序算法 排序算法非常的多,在学习数据结构和算法时肯定都会学习到关于排序的算法,虽然现在高级语言都自带内置的排...

  • 算法04-棋牌游戏常用排序算法

    算法04-棋牌游戏常用排序算法 一、介绍 棋牌游戏常用排序算法包括:链式基数排序、插入排序、希尔排序。 二、链式基...

  • 快速排序算法真的正确吗?-试试120,100,105,103,1

    快速排序算法是常用的排序算法之一,一次偶然的机会我发现快速排序算法存在一些问题,开始我以为只是我的这版教材有问题,...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 常用的排序算法

    常用的排序算法 常用的排序算法插入排序折半插入排序shell 排序冒泡排序选择排序快速排序基数排序归并排序堆排序K...

网友评论

    本文标题:常用排序算法学习(swift版)

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