快速排序的基本思想也比較清楚,首先找出乙個基準位置,該基準位置可以是陣列中的任何乙個元素,通常我們指定第乙個元素。每一次快速排序我們會將該基準位置上的元素放到最終它應該在的位置。即它左邊的所有元素都小於基準元素,它右邊的所有元素都大於基準元素。
function
quicksort
(arr)
function
sort
(arr, left, right)
// 從前往後遍歷,找出第乙個比piovt要大的元素
while
(l < r && arr[l]
<= piovt) l++
;// 將這個元素賦值給當前的r位置的元素
// 不用擔心這個元素將此時r位置的元素覆蓋,因為已經存到了l位置上
if(l < r)
// 當遍歷結束l==r時,將此時的poivt賦值給l
if(l >= r)
}// 遞迴
sort
(arr, left, r -1)
;sort
(arr, r +
1, right)
;}
複雜度nlog n 之快速排序
快速排序是利用分治和遞迴的思想進行的排序演算法,每一次都將第乙個元素置於它在陣列中應該的位置 前面的數字比它小,後面的數字比它大 然後就把此數的前半段和後半段重複前面的操作。核心思想就是利用了乙個paration這個函式。平均時間複雜度 最好時間複雜度 最壞時間複雜度 空間複雜度 nlog n nl...
排序演算法(nlogn級)
歸併排序 merge 函式是合併兩個有序序列,使用了two pointers的思想,可以看看演算法筆記上的記錄 將陣列a的 l1,r1 與 l2,r2 區間合併成有序區間 此處l2即為 r1 1 const int max 100 void merge t a,int l1,int r1,int l...
排序 快速排序
快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...