第一種是通過兩個for循環,每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比后面的大就交換這兩個數的位置,這個方法就是比較次數太多了,效率比價低。
我只是傳入了一個10位數的數組,如果是上萬或者更大的數據,不知道您的電腦會不會藍屏了,嘿嘿,你可以試試哦!
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var
Sort=
function
(arr){
for
(
var
i=0;i<arr.length-1;i++){
for
(
var
j=i+1;j<arr.length;j++){
if
(arr[i]>arr[j]){
/*如果前面的數據比后面的大就交換位置*/
var
list=arr[i];
arr[i]=arr[j];
arr[j]=list;
}
}
}
return
arr;
}
Sort([10,10,1,2,4,6,7,89,7,4])<br>輸出結果
|
下面我們來說說第二種方法,這方法是我瀏覽阮一峰老師日志看到的,這種方法的效率會高很多,具體選哪種,看情況吧!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var
quickSort =
function
(arr) {
if
(arr.length <= 1) {
//如果數組長度小於等於1無需判斷直接返回即可
return
arr;
}
var
pivotIndex = Math.floor(arr.length / 2);
//取基准點
var
pivot = arr.splice(pivotIndex, 1)[0];
//取基准點的值,splice(index,1)函數可以返回數組中被刪除的那個數
var
left = [];
//存放比基准點小的數組
var
right = [];
//存放比基准點大的數組
for
(
var
i = 0; i < arr.length; i++){
//遍歷數組,進行判斷分配
if
(arr[i] < pivot) {
left.push(arr[i]);
//比基准點小的放在左邊數組
}
else
{
right.push(arr[i]);
//比基准點大的放在右邊數組
}
}
//遞歸執行以上操作,對左右兩個數組進行操作,直到數組長度為<=1;
return
quickSort(left).concat([pivot], quickSort(right));
};<br>使用的時候,直接調用quickSort()就行了。
|
要是這些注釋你看了還不理解的話,那么,可以去看看阮一峰老師的日志,鏈接http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html