思想
快速排序作為分治代表,通常實現由三步
1.數據中選擇一個元素作為”基準”(pivot),通常選取最后一個元素;
2.分區(partition) 所有小于”基準”的元素,都移到”基準”的左邊;所有大于”基準”的元素,都移到”基準”的右邊。分區操作結束后,基準元素所處的位置就是最終排序后它的位置。
3.對“基準”左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。
實現:
func quickSort(inout a: [Int], l: Int, r: Int) { if l < r { var i = l, j = r, x = a[i] while i < j && a[j] >= x { j -= 1 } if i < j { a[i] = a[j] i += 1 } while i < j && a[i] < x { i += 1 } if i < j { a[j] = a[i] j -= 1 } a[i] = x quickSort( & a, l: l, r: i - 1) quickSort( & a, l: i + 1, r: r) }}var b = [8, 7, 6, 5, 4, 3, 2, 1]quickSort( & b, l: 0, r: 7)print(b)
新聞熱點
疑難解答