思想
快速排序作為分治代表,通常實(shí)現(xiàn)由三步
1.數(shù)據(jù)中選擇一個(gè)元素作為”基準(zhǔn)”(pivot),通常選取最后一個(gè)元素;
2.分區(qū)(partition) 所有小于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的左邊;所有大于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的右邊。分區(qū)操作結(jié)束后,基準(zhǔn)元素所處的位置就是最終排序后它的位置。
3.對“基準(zhǔn)”左邊和右邊的兩個(gè)子集,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個(gè)元素為止。
實(shí)現(xiàn):
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)
|
新聞熱點(diǎn)
疑難解答
圖片精選