iOS swift 选择排序 冒泡排序 快速排序

返回上级目录:iOS 算法题

三大经典排序 | 冒泡排序,选择排序,快速排序 - 知乎

1.选择排序

//选择排序
func rankSelect(_ array:Array<Int>) -> Array<Int>{
    
    
    var arrM = array
    var temp:Int
    for i in 0..<arrM.count {
    
    
        for j in (i+1)..<arrM.count {
    
    
            if arrM[i] > arrM[j] {
    
    
                temp = arrM[i]
                arrM[i] = arrM[j]
                arrM[j] = temp
            }
        }
    }
    return arrM
}

let arr:Array = [3,2,4,1]
let rankedArr = rankSelect(arr)
print(rankedArr)

打印结果:
[1, 2, 3, 4]

2.冒泡排序

//MARK:7.冒泡排序
func rankBubble(_ array:Array<Int>) -> Array<Int>{
    
    
    var arrM = array
    var temp:Int
    for i in 0..<arrM.count {
    
    
        for j in 0..<(arrM.count-1-i)  {
    
    
            if arrM[j] > arrM[j+1] {
    
    
                temp = arrM[j]
                arrM[j] = arrM[j+1]
                arrM[j+1] = temp
            }
        }
    }
    return arrM
}

let arr = [3,5,2,1,4]
let rankedArr = rankBubble(arr)
print(rankedArr)

打印结果:
[1,2,3,4,5]

3.快速排序

//MARK:8.快速排序
func rankFast(_ array:inout Array<Int>){
    
    
    var left = 0
    var right = array.count - 1
    if left == right || array.count < 2{
    
    
        return
    }
    var pivotValue = array[0]
    var temp:Int
    //是否是和右边的比
    var isCopareRight = true
    while left != right {
    
    
        if isCopareRight {
    
    
            //和右边的数比
            if pivotValue > array[right] {
    
    
                array[left] = array[right]
                left += 1
                isCopareRight = false
            }else{
    
    
                right -= 1
            }
        }else{
    
    
            //和左边的数比 [3,4,1,0,5]
            if pivotValue < array[left] {
    
    
                array[right] = array[left]
                right -= 1
                isCopareRight = true
            }else{
    
    
                left += 1
            }
        }
       
    }
    array[left] = pivotValue
    var childArr1 = Array(array[0..<left])
    var childArr2 = Array(array[(left+1)..<array.count])
    rankFast(&childArr1)
    rankFast(&childArr2)
    array = childArr1 + [array[left]] + childArr2
}

var arr = [6,7,1,5,4,2,3,4,56,0,23]
rankFast(&arr)
print(arr)

打印结果:
[0, 1, 2, 3, 4, 4, 5, 6, 7, 23, 56]
Program ended with exit code: 0

4分钟动画-秒懂快速排序
快速排序—最常用的排序算法
数据结构与算法:排序算法之快速排序「详细步骤图解」

猜你喜欢

转载自blog.csdn.net/baidu_40537062/article/details/123436151
今日推荐