思想:從陣列中隨機抽取乙個數(一般是取末尾的乙個數),然後遍歷一遍陣列,把比這個數小的放在左邊,比這個數大的放在右邊;排好序後的陣列左右兩邊也做和這個操作,最終條件到剩下乙個數就終止,這時候就有序了。下面**丟進去的陣列是inout直接被改變的,而不是結果返回型的,直接用low和high操作這個陣列就行。
快速排序對於歸併排序,其最壞情況o(n^2),假如排序的陣列本來就有順序,還從最後面取資料,就會導致partition的下標不在中間,盡量讓兩邊數量對齊。我們可以三數取中法(從陣列收尾中取元素,比較拿出中間值的元素,並作為分割槽點),不一定要取最後乙個。
相對於快速排序,歸併排序每次分開陣列都需要建立兩個陣列空間(100mb的資料就需要100mb的儲存空間),日常生活中小資料可以使用歸併排序,大資料處理快速排序更受歡迎。
**playground ** **
import uikit
func
sort
(input :inout [int])
func
quicksort
(input :inout [int],low : int ,high : int)
->[int]
let p = partition(input: &input, low: low , high : high)
quicksort(input: &input, low: low, high: p-1)
quicksort(input: &input, low: p+1, high: high)
return input
}func
partition
(input :inout [int] , low: int , high : int)
-> int
else
}input.swapat(i, high)
return i
}var a = [3,4,5,2,1,9,10]
sort(input: &a)
複製**
Swift 經典演算法之快速排序
快速排序 給基準資料找其正確索引位置的過程.快排的時間複雜度是o nlogn 空間複雜度是o logn 1 給乙個基準資料,一般是陣列第0個,即target array 0 2 從後半部分開始,如果掃瞄到的值大於基準資料就讓high減1,如果發現有元素比該基準資料的值小,就將high位置的值賦值給l...
快速排序實現
1.結束條件 low high 2.快速排序要分而治之。故需要分的位置,位置便是當前元素經過排列後應該所在的位置。3.對於單次的排列,都使得乙個元素排在了正確的位置,她的左面比她小,右側比她大。package com.jue.quicksort public class quicksort logs...
實現 快速排序
快速排序的基本思想 1 先從數列中選擇乙個數作為基準數 一般會把陣列中最左邊的數當做基準數 2 然後從數列兩邊進行檢索 先從右邊檢索比基準數小的,再從左邊檢索比基準數大的 如果檢索到了,就停下,然後交換這兩個元素。然後再繼續檢索。3 直到左檢索和右檢索相遇,把基準數和相遇位置的數交換。4 第一輪檢索...