Swift實現快速排序

2021-09-24 08:08:40 字數 1016 閱讀 4634

思想:從陣列中隨機抽取乙個數(一般是取末尾的乙個數),然後遍歷一遍陣列,把比這個數小的放在左邊,比這個數大的放在右邊;排好序後的陣列左右兩邊也做和這個操作,最終條件到剩下乙個數就終止,這時候就有序了。下面**丟進去的陣列是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 第一輪檢索...