原始快排,嘻嘻!
第一趟,flag = arr[0],len = arr.length,i = 1,j = len-1;
從arr[j]開始,找到第乙個小於flag的陣列元素(否 則另j–),將其傳給arr[0],同時,記下j的位置;
然後從arr[i]開始,找到第乙個大於flag的陣列元素(否則另i++),然後另arr[j] = arr[i],記下i的位置。
… 重複以上步驟,直至i == j,另arr[i] = flag;然後以i為分界線分為兩段,遞迴進行排序。
貼**:
function
quicksort
(arr)
arr[start] = flag;
if(len > start)
}sort(0,arr.length-1);
return arr;
}//最近學習到一種更容易理解的寫法,的確是比較簡單易懂
function
quicksort2
(arr)
var index = math.floor(arr.length/2),
flag = arr.splice(index,1)[0],
left = ,
right = ;
for(var i = 0; i < arr.length; i++)else
}return quicksort2(left).concat(flag,quicksort2(right));
}
這裡有乙個點需要注意,if (j - i > 0)這個條件,要求陣列元素個數最少為2,可以防止下標溢位,同時可以防止乙個元素無遞迴結束條件。
好的,那麼我們現在來看效率更高的快排。
思想:
第一趟,flag = arr[0],len = arr.length,i = 1,j = len-1;從i往後找到第乙個大於flag的元素,從j往前找到第乙個小於flag的元素,將二者進行交換,直至i == j;
然後判斷arr[i]與flag的相對大小,並將flag與arr[i]或者arr[i-1]交換;
這裡要注意,下一趟分段的界限與i或者i-1有關,可以看**理解下。
… 那麼,好了,分段遞迴即可。
上**:
function
quicksort2
(arr) ;
function
sort
(pre, len)
else
else}}
arr[i] > flag ? exchange(n = i - 1, pre) : exchange(n = i, pre);
sort(pre, n);
sort(n + 1, len);}};
sort(0, arr.
length);
return arr;
}
快速排序的多種思路實現
快速排序的多種思路實現 兩邊想中間靠攏 兩邊想中間靠攏,當a left key時,兩者交換 int partsortbothsize int a,int left,int right if begin if a begin a right return right 挖坑法 挖坑法left right...
快速排序的python多種實現
特別是python能用一句話實現快速排序。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子問題。...
快速排序 轉 快速排序的實現
總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有幫助,達到快速排序,快速搞定。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod ...