最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

快速排序算法在Swift編程中的幾種代碼實(shí)現(xiàn)示例

 更新時(shí)間:2016年07月06日 10:32:37   作者:FlyElephant  
快速排序是一種不穩(wěn)定的排序,存在著優(yōu)化空間,這里我們來看快速排序算法在Swift編程中的幾種代碼實(shí)現(xiàn)示例:

總所周知 快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用。
基本原理是:
數(shù)組a = [1,3,5,7,6,4,2]
1 選定一個(gè) 基準(zhǔn) a[0]
2 把比 a[0]小的放左邊,比a[0]大的放右邊. 中斷遞歸如果少于兩個(gè)數(shù)字 則不執(zhí)行。
3 然后再分別對兩邊 執(zhí)行 1,2,3操作。
對快速排序 的 想法
1 在待排序元素 大部分是有序的情況下, 速度 非常很快。
2 在最差的情況下,速度就很慢了。 相當(dāng)于冒泡了
3 所以 快排的 優(yōu)化, 定基準(zhǔn) 非常重要,例如待排序是有序的,基準(zhǔn)定在中間,xiao'lv
4 時(shí)間復(fù)雜度為nlogn,不穩(wěn)定排序

輔助空間

func quickSort(data:[NSInteger])->[NSInteger]{
  if data.count<=1 {
    return data
  }

  var left:[NSInteger]=[]
  var right:[NSInteger]=[]
  let pivot:NSInteger=data[data.count-1]
  for index in 0..<data.count-1 {
    if data[index]<pivot {
      left.append(data[index])
    }else{
      right.append(data[index])
    }
  }

  var result=quickSort(left)
  result.append(pivot)
  let rightResult=quickSort(right)
  result.appendContentsOf(rightResult)
  return result
}

經(jīng)典快排

func partition(inout data:[NSInteger],low:NSInteger,high:NSInteger) -> NSInteger {

  let root = data[high]
  var index = low
  for i in low...high {
    if data[i]<root {
      if i != index {
        swap(&data[i], &data[index])
      }
      index = index+1
    }
  }

  if high != index {
    swap(&data[high], &data[index])
  }
  return index
}

func quickSort(inout data:[NSInteger],low:NSInteger,high:NSInteger) -> Void {
  if low>high {
    return
  }
  let sortIndex = partition(&data, low: low, high: high)
  quickSort(&data, low: low, high: sortIndex-1)
  quickSort(&data, low: sortIndex+1, high: high)
}

測試代碼:

var data:[NSInteger] = [1,2,3,2,4,8,9,10,19,0]
var result=quickSort(data)
print("FlyElephant方案1:-\(result)")

var arr:[NSInteger] = [10,3,17,8,5,2,1,9,5,4]
quickSort(&arr, low: 0, high: arr.count-1)
print("FlyElephant方案2:-\(arr)")

201676102656922.png (351×34)

極簡版本    

 import UIKit
   extension Array {
     var decompose : (head: Element, tail: [Element])? {
       return (count > 0) ? (self[0], Array(self[1..<count])) : nil
     }
   }

   func qsortDemo(input: [Int]) -> [Int] {
     if let (pivot, rest) = input.decompose {
       let lesser = rest.filter { $0 < pivot }//這里是小于于pivot基數(shù)的分成一個(gè)數(shù)組
       let greater = rest.filter { $0 >= pivot }//這里是大于等于pivot基數(shù)的分成一個(gè)數(shù)組
       return qsortDemo(lesser) + [pivot] + qsortDemo(greater)//遞歸 拼接數(shù)組
     } else {
       return []
     }
   }

   var a:[Int] = [1,2,4,6,2,4,3,7,8]
   qsortDemo(a)

相關(guān)文章

  • Swift教程之下標(biāo)詳解

    Swift教程之下標(biāo)詳解

    這篇文章主要介紹了Swift教程之下標(biāo)詳解,本文講解了下標(biāo)語法、下標(biāo)的使用、下標(biāo)選項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • 淺談Swift編程中switch與fallthrough語句的使用

    淺談Swift編程中switch與fallthrough語句的使用

    這篇文章主要介紹了Swift編程中switch與fallthrough語句的使用,用于基本的流程控制,需要的朋友可以參考下
    2015-11-11
  • Swift中的指針操作和使用詳細(xì)介紹

    Swift中的指針操作和使用詳細(xì)介紹

    這篇文章主要介紹了Swift中的指針操作和使用詳細(xì)介紹,Apple期望在Swift中指針能夠盡量減少登場幾率,因此在Swift中指針被映射為了一個(gè)泛型類型,并且還比較抽象,本文詳細(xì)講解了Swift中指針的相關(guān)知識(shí),需要的朋友可以參考下
    2015-01-01
  • 純swift實(shí)現(xiàn)ipad版簡單美團(tuán)界面功能

    純swift實(shí)現(xiàn)ipad版簡單美團(tuán)界面功能

    這篇文章主要為大家詳細(xì)介紹了純swift實(shí)現(xiàn)ipad版簡單美團(tuán)界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例

    Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例

    希爾排序是對插入排序的一種改進(jìn)版本,算法本身并不穩(wěn)定,存在優(yōu)化空間,這里我們來講一下希爾排序的大體思路及Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例
    2016-07-07
  • Swift中 !和 ?的區(qū)別及使用

    Swift中 !和 ?的區(qū)別及使用

    這篇文章主要介紹了Swift中 !和 ?的區(qū)別及使用的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 關(guān)于swift的個(gè)人小結(jié)

    關(guān)于swift的個(gè)人小結(jié)

    本文是個(gè)人對于目前學(xué)習(xí)swift的一些心得的匯總,這里分享給大家,希望大家能夠喜歡
    2016-12-12
  • Swift 中如何使用 Option Pattern 改善可選項(xiàng)的 API 設(shè)計(jì)

    Swift 中如何使用 Option Pattern 改善可選項(xiàng)的 API 設(shè)計(jì)

    這篇文章主要介紹了Swift 中如何使用 Option Pattern 改善可選項(xiàng)的 API 設(shè)計(jì),幫助大家更好的進(jìn)行ios開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • swift中defer幾個(gè)簡單的使用場景詳解

    swift中defer幾個(gè)簡單的使用場景詳解

    在Swift 2.0中,Apple提供了defer關(guān)鍵字,讓我們可以實(shí)現(xiàn)同樣的效果,這篇文章主要介紹了關(guān)于swift中defer幾個(gè)簡單的使用場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用defer具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧。
    2018-03-03
  • Swift 4.0中如何引用3.0的第三方庫

    Swift 4.0中如何引用3.0的第三方庫

    這篇文章主要給大家介紹了關(guān)于在Swift 4.0中如何引用3.0第三方庫的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評論

井冈山市| 来安县| 平江县| 靖安县| 宿松县| 四会市| 鹰潭市| 洛浦县| 吐鲁番市| 黄山市| 肥城市| 玛纳斯县| 华宁县| 图木舒克市| 托里县| 连山| 陵水| 东兰县| 台安县| 大理市| 梁山县| 丰县| 潮安县| 湖北省| 淮北市| 岳普湖县| 淮安市| 连云港市| 宣恩县| 进贤县| 宣化县| 木里| 什邡市| 抚远县| 城口县| 高淳县| 浏阳市| 玉门市| 景洪市| 贵南县| 大兴区|