js 快速排序

2021-08-20 13:59:13 字數 1574 閱讀 9471

最近看到乙個排序,所以自己也看了一下,這裡分享一下。

首先建立乙個陣列

// 建立乙個陣列

const arr = ;

function random(min, max)

function generatearr(len)

}generatearr(10);

自己可以試試,看看效果;

然後是重點了,排序的主體函式

function quicksort(arr)

var pivotindex=math.floor(arr.length/2);

//找基準,並把基準從原陣列刪除

var pivot=arr.splice(pivotindex,1)[0];

//定義左右陣列

var left=;

var right=;

//比基準小的放在left,比基準大的放在right

for(var i=0;i為什麼列印時間(自己思考一下,後面解析,記得先思考一下)

好了,排序結束了,是不是很簡單呢?但是有個小問題,

這個就是所謂的:阮一峰版的快速排序

看下這個,有人懟他

js高階函式裡面還有乙個方法

var arr1 = arr.sort(function (x,y)

if (x > y)

return 0;

})

ok了,是不是很放便

這個就是阮一峰版所得的時間

// vim: 0.087890625ms 十

// vim: 0.41064453125ms

// vim: 7.47900390625ms

// vim: 13.7939453125ms 萬

// vim: 72.4541015625ms

// vim: 582.738037109375ms

// vim: 6897.35791015625ms 千萬

這裡的是另乙個時間

// vim: 0.196044921875ms

// vim: 5.68798828125ms

// vim: 4.801025390625ms

// vim: 11.506103515625ms 萬

// vim: 38.754150390625ms

// vim: 329.005859375ms

// vim: 4046.4951171875ms 千萬

// vim: 50085.428955078125ms

可以看出當超過一萬,時間就有了差別,而且當有

一億條資料的時候,上面的就跑不動了,所以沒有時間,但是下面的還有,從這一點可以看出下面的方法確實要強一點!

但是現實中有幾個能超過一億的啊,而且真的超過一億,我想排序也不會只用這乙個方法了!!

其實說實話,我覺得阮一峰版的,比較適合初學者,在沒有大資料處理的時候,完全可以使用,當然!具體使用那個還是要看你的選擇。

好了,分享就到這啦,感興趣的小夥伴可以自己試一試,畢竟這裡只是我測試的資料,你們也可以留下自己的資料,用來對比一下,畢竟不同的電腦,配置,測出來的資料是不一樣的!!

JS快速排序

從這裡看到的,修改了下,跳出左右側搜尋時不需要判斷等於基準值的情況,其次 當排序完有一側只有0或者1個數字時則該側不再進行排序 不判斷也可以,因為此時start等於end,進行排序時,會直接跳出迴圈,但是仍會列印排序後的陣列,就會有重複,影響判斷排序次數。陣列數值用的是資料結構 c語言版 第二版 嚴...

JS 快速排序

var arr 90,80,79,60,5,4,31,2,9 1 取基準值的下標 index math.floor arr.length 2 2 取基準值 midvalue arr.splice index,1 3 根據基準值分左右 定義兩個子集,接收資料 var left var right 4 ...

快速排序JS

思想 建立兩個陣列left right 取乙個基準值可以陣列中任一元素 下面取了陣列的中間元素並且從陣列中剝離出來 將陣列中的元素與基準值比較 小於基準值的放進左邊 left陣列 大於基準值的放進右邊right陣列 重複 步驟2 3 var arr 3,4,2,6,5,8,9,10,16,13 le...