Swift版快速排序

来源:互联网 发布:js获取自定义标签的值 编辑:程序博客网 时间:2024/05/18 01:38

步骤:

1.- 从数列中挑出一个元素,称为 “基准”(Pivot),
2.- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

排序效果:

这里写图片描述

Swift代码:

func QuickSort(inout list: [Int], first: Int, last: Int) {    var i, j, key: Int    if first >= last {        return;    }    i = first    j = last    key = list[i]    while i < j {        //找出来比key小的 并排到key前面        while i < j && list[j] > key {            j--        }        if i < j {            list[i++] = list[j]        }        //找出来比key大的 并排到key后面        while i < j && list[i] < key {            i++        }        if i < j {            list[j--] = list[i]        }    }    list[i] = key    //将key前面元素递归的进行下一轮排序    if first < i - 1 {        QuickSort(&list, first: first, last: i - 1)    }    //将key后面的元素递归的进行下一轮排序    if i + 1 < last {        QuickSort(&list, first: i + 1, last: last)    }}var list: [Int] = Array()//生成一组随机整数for index in 1...10 {    list.append(Int(arc4random() % 100 + 1))}print(list)QuickSort(&list, first: 0, last: list.count - 1)print(list)

结果:

这里写图片描述

0 0