大佬教程收集整理的这篇文章主要介绍了swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import UIKit
/// 冒泡
///
///时O(n2),空O(1) 稳定排序
func Mysort(arr:[Int]) -> [Int]{
var transarr = arr
for j in 0..<transarr.count-i-1{
if transarr[j] > transarr[j+1]{
transarr.swapAt(j,j+1) //交换需要三条语句
}
}
}
return transarr
}
let arr = Mysort(arr: [2,4,1,5,6,8,3])
//插入排序
//时O(n2),空O(1) 稳定排序
func insertSort(arr:[Int]) -> [Int]{
var newArr = arr
for i in 0..<newArr.count{
var j = i - 1
let value = newArr[i]
while j>=0 && newArr[j] > value{
newArr[j+1] = newArr[j] //比value的的都往后移动一位移动数据
j -= 1
}
newArr[j+1] = value//j+1的位置就是要插入的位置
}
return newArr
}
let arr1 = insertSort(arr: [2,3,-3,-1])
func optionSort(arr:[Int]) -> [Int]{
var newArr = arr
for i in 0..<newArr.count {
var minValue = newArr[i]
var minIndex = i
for j in i+1 ..< newArr.count {
if minValue > newArr[j] {
}
}
newArr.swapAt(minIndex,i)
}
return newArr
}
//let arr2 = optionSort(arr: [2,-1])
//快速排序 O(nlogn) 原地 稳定排序
func quickSort(arr:inout [Int],low:Int,high:int){
if low >= high {
return
}
let point = partition(arr: &arr,low: low,high: high)
quickSort(arr: &arr,high: point-1)
quickSort(arr: &arr,low: point+1,high: high)
}
//找临界点的位置
func partition(arr:inout [Int],high:int)->Int{
let pointV = arr[high]
var i = low
for j in low...high-1 {
if arr[j] < pointV {
arr.swapAt(i,j)
i+=1
}
}
arr.swapAt(i,high)
return i
}
func quickSort(arr:[Int]) ->[Int]{
var newArr = arr
quickSort(arr: &newArr,low: 0,high: arr.count - 1)
return newArr
}
//let arr2 = quickSort(arr: [2,-1])
//归并 O(nlogn) 非原地排序O(n) 非稳定排序
func mergeSort(arr:[Int]) -> [Int]{
var tempArr : [[Int]] = []
for item in arr {
var subArr : [Int] = []
subArr.append(item)
tempArr.append(subArr)
}
var i = 0
while i < tempArr.count - 1{
tempArr[i] = merge(arr1: tempArr[i],arr2: tempArr[i+1])
tempArr.remove(at: i+1)
i += 1
}
}
return tempArr.first!
}
//合并两个有序数组,合并之后仍是有序数组
func merge(arr1:[Int],arr2:[Int]) -> [Int]{
var newArr = [Int]()
var i = 0
var j = 0
while i<arr1.count && j<arr2.count {
if arr1[i] < arr2[j]{
newArr.append(arr1[i])
i+=1
}else{
newArr.append(arr2[j])
j+=1
}
}
while i < arr1.count {
newArr.append(arr1[i])
i += 1
}
while j < arr2.count {
newArr.append(arr2[j])
j += 1
}
return newArr
}
//let arr2 = mergeSort(arr: [2,-1])
//基数排序
func BaseSort(arr:inout [Int]) {
if arr.count == 0 {
return
}
var list:[[Int]] = []
for _ in 0..<10 {
let temp:[Int] = []
list.append(temp)
}
let maxDigit:Int = maxlength(arr: arr)//最大的位数
var tempArr:[Int] = arr
for i in 0..<maxDigit {
for j in 0..<arr.count {
let index:Int = highDigit(num: tempArr[j],index: i)
list[index].append(tempArr[j]) //放入相应的桶中
}
saveBucketData(bucketlist: &list,arr: &tempArr)
}
arr = tempArr
}
// 桶的数据插入数组
private func saveBucketData(bucketlist:inout [[Int]],arr:inout [Int]) {
var index:Int = 0
for i in 0..<bucketlist.count {
var bucket:[Int] = bucketlist[i]
if bucket.count > 0 {
for j in 0..<bucket.count {
}
}
bucketlist[i].removeAll() // 注意清空桶数据
}
}
//取出某位上的数字
private func highDigit(num:Int,index:int)->Int {
let base:Double = pow(10,Double(indeX))
let high:Int = (num / Int(basE)) % 10
return high
}
// 最大数字的位数
private func maxlength(arr:[Int])->Int {
var max:Int = 0
for i in 0..<arr.count {
let count:Int = positionOfNum(number: arr[i])
if count > max {
max = count
}
}
return max
}
// 统计数字的位数
private func positionOfNum(number:int)->Int {
var count:Int = 0
var num:Int = number
while num%10 > 0 {
count += 1
num = num / 10
}
return count
}
var inters = [2,7,3]
inters.replaceSubrange(0..<3,with: [2,7])
inters.dropLast()
let a1 = [2,2]
let a2 = [2,3]
//n2 + n2 + n
//n2
var a22 = a2
//for num1 in a1 {
// for index in 0..<a22.count{
//// if index < a22.count{ //加上这个条件判断就没错了
// if num1 == a22[index]{
// a22.remove(at: indeX) //经典的l遍历删除错误
// }
//
//// }
// }
//}
class Person :Equatable{
var age:Int
var name:string
self.age = age
self.name = name
}
static func == (lhs: Person,rhs: Person) -> Bool{
let point = Unmanaged<AnyObject>.passUnretained(lhs as AnyObject).toOpaque()
let point1 = Unmanaged<AnyObject>.passUnretained(rhs as AnyObject).toOpaque()
return point.hashValue == point1.hashValue
}
}
以上是大佬教程为你收集整理的swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序全部内容,希望文章能够帮你解决swift冒泡排序,swift快速排序,swift归并排序,swift插入排序,swift基数排序所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。