js編寫快速排序

以前一直學的c語言版的數據結構,因此想嘗試一下js版的快速排序,發現更有趣。html

其實原理都是大同小異的,下面就來介紹一下原理。數組

一、首先選一個「基準」,通常選中間值比較合適,由於選兩頭數據都有可能出現最壞的狀況。數據結構

二、將數組中的數據與「基準」比較,小於「基準」則存放在另外一個數組left(左子集)中,大於「基準」則存放在數組right(右子集)中。函數

三、利用遞歸函數,將left和right分別重複1和2,每一個數組剩下一個元素爲止。ui

 

舉個栗子:spa

12 93 60 9 34 46 78 2 30htm

12 9 2 30 34 93 60 46 78排序

2 12 9 30 34 46 93 60 78遞歸

2 9 12 30 34 46 60 93 78ip

2 9 12 30 34 46 60 78 93

下面是代碼:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

<script>

 

function quicksort(arr){

if(arr.length<=1)//判斷數組長度,若是小於等於1直接返回輸出

return arr;

var pviotIndex=Math.floor(arr.length/2);//取中間元素下標

var pviot=arr.splice(pviotIndex,1)[0];//返回中間元素,並刪除原數組中間元素

var left=[];

var right=[];

for(var i=0;i<arr.length;i++){

if(arr[i]<pviot){

left.push(arr[i]);//在left末尾追加小於基準的元素

}else{

right.push(arr[i]);

}

}

return quicksort(left).concat([pviotIndex],quicksort(right));//遞歸檢索比較,而且用concat把左子集、基準和右子集鏈接起來。

}

 

</script>

</head>

<body>

</body>

</html>

相關文章
相關標籤/搜索