国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

快速排序算法在Swift編程中的幾種代碼實現示例

2020-03-09 17:48:10
字體:
來源:轉載
供稿:網友

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

輔助空間

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}

經典快排

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)")

快速排序,Swift,排序算法

極簡版本    

 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基數的分成一個數組       let greater = rest.filter { $0 >= pivot }//這里是大于等于pivot基數的分成一個數組       return qsortDemo(lesser) + [pivot] + qsortDemo(greater)//遞歸 拼接數組     } else {       return []     }   }   var a:[Int] = [1,2,4,6,2,4,3,7,8]   qsortDemo(a)


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒲城县| 安康市| 纳雍县| 大英县| 南通市| 措美县| 武汉市| 金沙县| 巴彦淖尔市| 壤塘县| 汶川县| 昆山市| 南康市| 夏邑县| 津南区| 乌兰察布市| 通许县| 绍兴市| 安达市| 龙江县| 藁城市| 盱眙县| 洛扎县| 疏附县| 罗田县| 五家渠市| 禹州市| 凤庆县| 承德县| 泗阳县| 汽车| 财经| 晋城| 手机| 卢氏县| 鄂温| 平和县| 海南省| 玛沁县| 淮滨县| 彭泽县|