快速排序的多種實現(一)

2021-07-29 23:59:36 字數 1464 閱讀 4174

原始快排,嘻嘻!

第一趟,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 ...